簡體   English   中英

如何從Perl中的字符串中提取單個字符或封閉的分組?

[英]How do I extract single characters or enclosed groupings from a string in Perl?

我想拆分字符串:“Hello [You] All”

到以下數組:

H,e,l,l,o,[You],A,l,l

我嘗試用拆分做到這一點:

my $str = "Hello[You]All";
my @list = split(/(\[.*?\]|.)/, $str);

foreach (@list) {
    print "->$_\n";
}

既然我嘗試了分裂不應該做的事情,它給了我以下數組:

,H,,e,,l,,l,,o,,[You],,A,,l,,l,

我需要采取的下一步是刪除空格。

雖然它不是最好的解決方案,但它是我找到的唯一解決方案,沒有任何太混亂。 我在這里發帖詢問是否有人知道更好的方法來解決這個問題?

my $str = "Hello[You]All";
my @list = $str =~ /(\[.*?\]|.)/g;

foreach (@list) {
    print "->$_\n";
}

也就是說:你不需要拆分你正在使用的模式(導致那些空元素,因為它們是使用你的模式作為分隔符拆分出來的實際文本); 你只需要為你的模式提取所有匹配項。 哪個在數組上下文中進行全局( /g )模式匹配呢。

你可以grep非空元素的結果;

my @list = grep /./, split(/(\[.*?\]|.)/, $str);

或者,

my @list = $str =~ /\[.*?\]|./g;

雖然我也認為混亂的答案在這里是正確的,但為了完整性,這里是使用splitgrep實現你想要的一種方法:

#!/usr/bin/perl

use strict;
use warnings;

my $x = "Hello[You]All";
my @x = grep { defined } split qr{(\[.+\])|}, $x;

use Data::Dumper;
print Dumper \@x;

使用此模式, split括號內的字符(您沒有提及"a[]b"是否為有效輸入)或空字符串和grep過濾器defined ness而不是真值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM