[英]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;
雖然我也認為混亂的答案在這里是正確的,但為了完整性,這里是使用split
和grep
實現你想要的一種方法:
#!/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.