正则表达式懒惰匹配+分组

时间:2012-08-09 17:12:05

标签: regex

我在使用正则表达式进行惰性匹配时遇到问题。没有例子就很难解释:

我的正则表达式:A\d*?(88)?\d*?B


示例1:A12388456B

我想要的:匹配字符串,组1匹配“88”

会发生什么:匹配字符串,但组1不匹配。


示例2:A123B

我想要的是:匹配字符串,第1组不匹配。

会发生什么:正常工作


基本上我希望组1匹配“88”,如果它出现,但我想匹配任何模式A\d+B

这看起来应该很简单,但我遇到了麻烦。

3 个答案:

答案 0 :(得分:1)

在Javascript中试用这个正则表达式:

 'A12388456B'.match(/A(?:\d*?(88))?\d*?B/);
 > ["A12388456B", "88"]  // Matches string and 88.

 'A123B'.match(/A(?:\d*?(88))?\d*?B/);
 > ["A123B", undefined]  // Matches string but nothing else.

在第一个例子中,第1组捕获88。

答案 1 :(得分:0)

您想要匹配的第一个群组未标记为群组。

你想要:

<击>(A \ d *)?(88)?\ d * 2 B

然后你有两个子组,主要匹配。

答案 2 :(得分:0)

使用正则表达式A(?=\d*(88))\d*B,如果找到匹配项,则组1将包含88