我认为这应该很简单,在同一行上匹配双/单引号中的字符串
例如,跟随字符串全部在同一行
“你好”’世界”foo’“酒吧”
我有
print /(\”.*?\”)|(‘.*?’)/g;
但我得到了以下错误
在…的印刷中使用未初始化的价值
解决方法
以下将返回您提到的警告:
use strict; use warnings; my $str = q{"hello" 'world' 'foo' "bar"}; print $str =~ /(".*?")|('.*?')/g;
这是因为您的正则表达式只匹配捕获组中的一个或另一个.另一个将不匹配,因此将返回undef.
以下将说明:
while ($str =~ /(".*?")|('.*?')/g) { print "one = " . (defined $1 ? $1 : 'undef') . "\n"; print "two = " . (defined $2 ? $2 : 'undef') . "\n"; print "\n"; }
输出:
one = "hello" two = undef one = undef two = 'world' one = undef two = 'foo' one = "bar" two = undef
要获得所需的行为,只需将捕获组放在整个表达式周围即可.
print $str =~ /(".*?"|'.*?')/g;