捕获中包含非捕获组?

时间:2015-03-02 12:45:14

标签: regex

本文

"dhdhd89(dd)"

与此正则表达式匹配

.+?(?:\()

..返回“ dhdhd89(”。

为什么捕获中包含起始括号? 两个不同的工具以及.NET Regex类返回相同的结果。所以我认为有一些我不明白的事情。

我阅读正则表达式的方式是。

  • 匹配任何字符,至少出现一次。尽可能少。
  • 匹配的字符串后面应该有一个开始括号,但不能包含在捕获中。

我可以找到解决方法,但我仍然想知道发生了什么。

3 个答案:

答案 0 :(得分:1)

只需将非捕获组转为正向先行断言即可。

.+?(?=\()

.+?一个或多个字符的非贪婪匹配,后跟一个左括号。断言将不匹配任何字符,但断言是否可以匹配。但非捕获组将进行匹配操作。

DEMO

答案 1 :(得分:1)

您可以使用此基于否定的正则表达式仅捕获文字(之前的文字:

^([^(]+)

使用时:

.+?(?:\()

正则表达式引擎在初始文本后匹配(,但它不会将捕获的组中的内容返回给您。

答案 2 :(得分:1)

你没有定义捕获组然后我猜你显示整个匹配(组0),你可以这样做:

(.+?)(?:\()

,您想要的字符串在第1组

或使用lookahead @AvinashRaj说。