我想拆分字符串:"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";
}
Run Code Online (Sandbox Code Playgroud)
既然我尝试了分裂不应该做的事情,它给了我以下数组:
,H,,e,,l,,l,,o,,[You],,A,,l,,l,
我需要采取的下一步是删除空格.
虽然它不是最好的解决方案,但它是我找到的唯一解决方案,没有任何太混乱.我在这里发帖询问是否有人知道更好的方法来解决这个问题?
my $str = "Hello[You]All";
my @list = $str =~ /(\[.*?\]|.)/g;
foreach (@list) {
print "->$_\n";
}
Run Code Online (Sandbox Code Playgroud)
也就是说:你不需要拆分你正在使用的模式(导致那些空元素,因为它们是使用你的模式作为分隔符拆分出来的实际文本); 你只需要为你的模式提取所有匹配项.哪个/g在数组上下文中进行global()模式匹配呢.
你可以grep非空元素的结果;
my @list = grep /./, split(/(\[.*?\]|.)/, $str);
Run Code Online (Sandbox Code Playgroud)
或者,
my @list = $str =~ /\[.*?\]|./g;
Run Code Online (Sandbox Code Playgroud)