我遇到了最棘手的问题,而且我知道这一定是我无法忽视的微不足道的事情。我正在编写一个工作正常的简单正则表达式,直到我尝试命名我的捕获组。例如,您可以在http://www.regexr.com/上重现此内容。
要匹配的文字:
'1.2.3.4'
使用正则表达式:
'(.*?)'
这很好用,它与版本号匹配。但是,当我将正则表达式更改为:
'(?<VersionNumber>.*?)'
它不再匹配,regexr在第一个问号上说Error: Invalid quantifier for target
。我也在我的C#应用程序中确认了相同的结果。我在这里做错了什么?
这是一个非常简单的例子,所以我不确定什么是不正确的。我找到了this post,它描述了一个类似的问题,但答案只是为OP提供了新的正则表达式,而不是实际告诉他为什么他的原始正则表达式无效。
更新
答案是regexr.com不再支持已命名的捕获组,我必须第一次使用C#来填充我的正则表达式,因为当我重写它时工作正常。
答案 0 :(得分:2)
你必须要关心语言。每种语言都有不同的实现方式如何定义命名组:
JavaScript根本不支持它。
在PHP中你的例子是(?P<VersionNumber>.*?)
在C#中,您应该可以使用(?<VersionNumber>.*?)
或(?'VersionNumber'.*?)
您可以在此处查看更多示例:http://www.regular-expressions.info/named.html