为什么会这样?我有一个复杂的正则表达式,但这就是让我发疯的原因。
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 的机器上,我可以在这个网站上重现它。