0

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

要匹配的文本:

'1.2.3.4'

要使用的正则表达式:

'(.*?)'

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

'(?<VersionNumber>.*?)'

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

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


更新

答案是 regexr.com 不再支持命名的捕获组,而且我一定是第一次在 C# 中搞砸了我的正则表达式,因为当我重写它时它运行良好。

4

1 回答 1

4

你必须注意语言。每种语言都有不同的实现如何定义命名组:

JavaScript 根本不支持它。

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

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

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

于 2014-10-10T20:39:30.863 回答