0

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

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

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

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

2 回答 2

3

Regex

[character_group] 匹配character_group.

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

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

(subexpression) 捕获匹配的子表达式并为其分配一个序数。

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

$ 匹配必须出现在字符串\n的末尾或行或字符串的末尾之前。

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

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

并且您的所有代码都可以正常工作。

于 2012-11-08T05:34:11.027 回答
1

你的第一个正则表达式是正确的,但第二个不是。它与第一个正则表达式匹配相同的内容,但在此过程中做了很多不必要的工作。一探究竟:

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

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

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

于 2012-11-08T07:02:35.647 回答