正则表达式+符号仅适用于前一个元素吗?

时间:2012-11-08 05:13:14

标签: c# .net regex string

为了匹配以04开头且仅包含数字的所有字符串,以下内容是否有效?

Regex.IsMatch(str, "^04[0-9]+$")

或者是否需要另一组括号?

Regex.IsMatch(str, "^04([0-9])+$")

2 个答案:

答案 0 :(得分:3)

Regex

  

[character_group] 的   匹配character_group中的任何单个字符。

     

\d 的   匹配任何十进制数字。

     

+ 的   匹配前一个元素一次或多次。

     

(subexpression) 的   捕获匹配的子表达式并为其指定序号。

     

^ 的   匹配必须从字符串或行的开头开始。

     

$ 的   匹配必须发生在字符串的末尾,或者在行或字符串末尾的\n之前。

这样代码可能会有所帮助:

Regex.IsMatch(str, "^04\d+$")

并且您的所有代码都能正常运行。

答案 1 :(得分:1)

你的第一个正则表达式是正确的,但第二个是正确的。它与第一个正则表达式匹配相同的东西,但它在这个过程中做了很多不必要的工作。看看:

Regex.IsMatch("04123", @"^04([0-9])+$")

在此示例中,{1}}在组#1中被捕获,仅被1覆盖,再被2覆盖。将量词添加到捕获组几乎绝不是一个好主意。有关详细说明,请阅读this

但也许这是你要问的优先规则。量词具有比串联更高的优先级,因此不需要用括号隔离字符类(如果这就是你正在做的事情)。