我快疯了!
1.我将一个txt文件读入一个名为$filestring的字符串。
sysopen(handle, $filepath, O_RDONLY) or die "WHAT?";
local $/ = undef;
my $filestring = <handle>;
1.我创建了一个名为$regex的模式变量,它是动态生成的,但采用以下格式:
(a)|(b)|(c)
1.我在文本中搜索由空格分隔的模式
while($filestring =~ m/($regex)\s($regex)/g){
print "Match: $1 $2\n";
#...more stuff
}
大多数匹配都是有效的,但由于某种原因,我偶尔会得到如下这样的匹配:
Match: and
而正常匹配应该具有如下的两个输出:
Match: , and
有人知道是什么原因吗?
EDIT:模式中似乎匹配了NULL字符。
1条答案
按热度按时间lpwwtiir1#
正则表达式中的每个替代项都是一个单独的捕获组。整个正则表达式如下所示:
我已经用每个正则表达式片段的捕获组号来标记它。
因此,如果
$filestring
是b a
,$1
将是b
,$2
将是空字符串,因为没有匹配(a)
的字符串。若要避免这种情况,您应该使用非撷取群组做为替代: