2012-11-08 15 views
0

为了匹配以04开头并且只包含数字的所有字符串,下列工作将会进行吗?正则表达式+符号只适用于前一个元素吗?

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

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

​​
+0

是的,第一个会工作。匹配'041042043'你明确需要'^(04 [0-9])+'(或者更简单的'^(04 \ d)+') – Phrogz

+0

你试过了吗? – Toto

回答

3

Regex

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

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

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

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

^ 比赛必须在字符串或行的开头开始。

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

使得该代码可能是有用的:

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

和所有代码的正常工作。

+1

其实,'(...)'组被分配从*一个*开始的序号,“第零组”始终是整个匹配。 –

+0

谢谢,你说得对 – Ria

1

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

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

在这个例子中,1在组#1拍摄,只有由2并再次被覆盖由3。为捕获组添加量词几乎不是一个好主意。有关详细说明,请阅读this

但也许这是你问的优先规则。量词具有比串联更高的优先级,所以不需要用括号来区分字符类(如果这就是你所做的)。

相关问题