为了匹配以04
开头且仅包含数字的所有字符串,以下内容是否有效?
Regex.IsMatch(str, "^04[0-9]+$")
或者是否需要另一组括号?
Regex.IsMatch(str, "^04([0-9])+$")
答案 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。
但也许这是你要问的优先规则。量词具有比串联更高的优先级,因此不需要用括号隔离字符类(如果这就是你正在做的事情)。