1

我想对“a”的零到“m”个连续出现或“b”的零到“n”个连续出现的替代进行贪婪匹配。如果我做

/a{,m}|b{,n}/

它不起作用,因为当我有 'b' 序列时,它将与 'a{,m}' 匹配,而替代的 'b{,n}' 将不会被查看,也不会是贪婪匹配.

4

2 回答 2

1

如果我了解您要正确执行的操作,那么/(?:a{1,m}|b{1,n})?/

它将匹配一串连续的 a(最多m次)或一串连续的 b(最多n次),或者由于可选的?.

于 2011-03-31T15:55:45.253 回答
0

我认为默认情况下,量词是贪婪的,从左到右。因此,在非存在的情况下,您在交替匹配中遇到 a{0,m} 并不是一个真正的贪婪问题a。如果他们先出现,它会匹配到'm'a's。

贪婪似乎比人们想象的要复杂。

'aaaaaaaaaa' =~ /(a{1,2}) (a{1,2}?) (a{1,4}) (a{4,12}+)/x&&
print "'$1', '$2', '$3', '$4'";

'aa', 'a', 'aaa', 'aaaa'

于 2011-03-31T17:03:59.410 回答