2011-03-31 115 views
1

我想做一个贪婪匹配一个替代零或'm'连续发生的'a'或零到'n'连续发生的'b'。如果我做替代贪婪的匹配

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

它不会工作,因为当我的“B”序列,它将匹配“a {,M}”和替代“B {,N}”不会被看不起在,它不会是一个贪婪的比赛。

+2

你抱怨正则表达式看起来并不好:) – 2011-03-31 15:53:46

+0

你想配什么图案​​我'给人的印象是你不明白'[ab]'的作用 – zzzzBov 2011-03-31 15:55:26

+1

请给出一个你想匹配的目标字符串的例子 – 2011-03-31 15:57:52

回答

1

如果我明白你什么正确地做,怎么样/(?:a{1,m}|b{1,n})?/

它会匹配任何连续一个的(高达倍),或连续B的字符串中的字符串(最多到n次),或根本没有任何可选的?

+0

我认为原始问题中的问题是序列“aaaabbbb”@sawa想要匹配整个序列,而不仅仅是“a”或“b”部分。 – glenatron 2011-03-31 15:59:07

+0

谢谢。这正是我想要的。我为什么不拿出这个?尼斯。 @glenatron丹尼尔的正则表达式是我想要的。请等待5分钟让我接受答案。 – sawa 2011-03-31 15:59:41

+0

@sawa请记住,除非你[莫名其妙] [锚],否则'a {1,m} html)你的模式(即'/ a {1,4} /'将匹配'aaaaaaaaaa'中的前四个a) – 2011-03-31 16:04:18

0

我认为默认情况下,量词很贪婪,从左到右。所以它不是一个真正的贪婪问题,你在非a的存在下交替匹配{0,m}。如果他们第一次出现,它会匹配到'米'。

贪婪似乎比人们猜测的要复杂。

'AAAAAAAAAA'=〜/(a{1,2}) (a{1,2}?) (a{1,4}) (a{4,12}+)/x & &
打印"'$1', '$2', '$3', '$4'“?

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