为什么会这样?我有一个复杂的正则表达式,但这就是让我发疯的原因。
a|b
匹配 singlea或 single b。
a+|b+
匹配系列a或 系列b.
a{1}|b{1}
匹配两个相同的单个字母。
但我需要这样做:
a{0,2}|b{0,2}
这个正则表达式只匹配a,根本不匹配b。那有什么问题?
更有趣的是,如果我将 , 更改0为1,它{1,2}会再次开始正确匹配(或更好,如预期的那样)。
由于现在看起来很清楚,我添加了我的真实示例:
my $launch_regexp = '(\d*)d{0,1}(\d*)(\+{0,2}|-{0,2})(\d*)';
($dice, $fc, $op, $mod) = ($launch =~ /$launch_regexp/);
哪里$launch是一样的$ARGV[1]。
我想匹配很多东西。例子:
3 (numbers)
d10 (d + numbers)
3d10 (numbers + d + numbers)
3d10+/-5 (numbers + d + numbers + (+|-) + numbers)
3d10++/--5 (numbers + d + numbers + (++|--) + numbers)
我知道我的正则表达式也匹配其他字符串,但现在它适用于+而不适用于-.
如果我用 更改范围{1,2},它将匹配带有 + 和 - 的字符串(但我还需要匹配没有此类修饰符的字符串)。
这发生在我使用 Perl 5.16.3 的机器上,我可以在这个网站上重现它。