名为捕获组的正则表达式不起作用

时间:2014-10-10 20:25:33

标签: regex capture-group

我遇到了最棘手的问题,而且我知道这一定是我无法忽视的微不足道的事情。我正在编写一个工作正常的简单正则表达式,直到我尝试命名我的捕获组。例如,您可以在http://www.regexr.com/上重现此内容。

要匹配的文字:

'1.2.3.4'

使用正则表达式:

'(.*?)'

这很好用,它与版本号匹配。但是,当我将正则表达式更改为:

'(?<VersionNumber>.*?)'

它不再匹配,regexr在第一个问号上说Error: Invalid quantifier for target。我也在我的C#应用​​程序中确认了相同的结果。我在这里做错了什么?

这是一个非常简单的例子,所以我不确定什么是不正确的。我找到了this post,它描述了一个类似的问题,但答案只是为OP提供了新的正则表达式,而不是实际告诉他为什么他的原始正则表达式无效。


更新

答案是regexr.com不再支持已命名的捕获组,我必须第一次使用C#来填充我的正则表达式,因为当我重写它时工作正常。

1 个答案:

答案 0 :(得分:2)

你必须要关心语言。每种语言都有不同的实现方式如何定义命名组:

JavaScript根本不支持它。

在PHP中你的例子是(?P<VersionNumber>.*?)

在C#中,您应该可以使用(?<VersionNumber>.*?)(?'VersionNumber'.*?)

您可以在此处查看更多示例:http://www.regular-expressions.info/named.html