這是爲什麼發生?我有一個複雜的正則表達式,但這是讓我瘋狂的原因。a {0,1} | b {0,1}只匹配'a',爲什麼?
a|b
匹配任一單個a
或單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,我可以在this website重現它。
'A {0,2}'是'包含任何B'串一個完全有效的匹配,因爲它匹配'B'零次。你想通過提供投入和預期產出來澄清你的問題嗎? – TLP
{0,2}與0 a的匹配值最高爲1.因此,您可能不會擁有該案例,因爲它永遠無法達到該案例。您需要確定它至少匹配1個a或至少1個b。 – scrappedcola
您正在使用哪種正則表達式引擎?我無法使用PCRE兼容引擎重現您的問題,或者我誤解了它。 –