为了匹配所有以数字开头04
且仅包含数字的字符串,以下操作是否有效?
Regex.IsMatch(str, "^04[0-9]+$")
或者是否需要另一组括号?
Regex.IsMatch(str, "^04([0-9])+$")
在Regex
:
[character_group]
匹配character_group
.
\d
匹配任何十进制数字。
+
匹配前一个元素一次或多次。
(subexpression)
捕获匹配的子表达式并为其分配一个序数。
^
匹配必须从字符串或行的开头开始。
$
匹配必须出现在字符串\n
的末尾或行或字符串的末尾之前。
这样这段代码可能会有所帮助:
Regex.IsMatch(str, "^04\d+$")
并且您的所有代码都可以正常工作。
你的第一个正则表达式是正确的,但第二个不是。它与第一个正则表达式匹配相同的内容,但在此过程中做了很多不必要的工作。一探究竟:
Regex.IsMatch("04123", @"^04([0-9])+$")
在此示例中,1
被捕获在组 #1 中,只是被2
覆盖3
。将量词添加到捕获组几乎不是一个好主意。有关详细说明,请阅读此内容。
但也许这是您要询问的优先规则。量词比串联具有更高的优先级,因此无需使用括号隔离字符类(如果您正在这样做)。