为了匹配以04
开头并且只包含数字的所有字符串,下列工作将会进行吗?正则表达式+符号只适用于前一个元素吗?
Regex.IsMatch(str, "^04[0-9]+$")
或者是另一组括号是否必要?
为了匹配以04
开头并且只包含数字的所有字符串,下列工作将会进行吗?正则表达式+符号只适用于前一个元素吗?
Regex.IsMatch(str, "^04[0-9]+$")
或者是另一组括号是否必要?
在Regex
:
[character_group]
匹配character_group
任何单个字符。
\d
匹配任何十进制数字。
+
匹配前面的元素的一个或多个次。
(subexpression)
捕获匹配的子表达式,并为其分配一序数。
^
比赛必须在字符串或行的开头开始。
$
匹配必须出现在字符串的末尾或\n
在线路或字符串的结尾之前。
使得该代码可能是有用的:
Regex.IsMatch(str, "^04\d+$")
和所有代码的正常工作。
其实,'(...)'组被分配从*一个*开始的序号,“第零组”始终是整个匹配。 –
谢谢,你说得对 – Ria
你的第一个正则表达式是正确的,但第二个正则表达式不正确。它与第一个正则表达式匹配相同的东西,但它在这个过程中做了很多不必要的工作。检查出来:
Regex.IsMatch("04123", @"^04([0-9])+$")
在这个例子中,1
在组#1拍摄,只有由2
并再次被覆盖由3
。为捕获组添加量词几乎不是一个好主意。有关详细说明,请阅读this。
但也许这是你问的优先规则。量词具有比串联更高的优先级,所以不需要用括号来区分字符类(如果这就是你所做的)。
是的,第一个会工作。匹配'041042043'你明确需要'^(04 [0-9])+'(或者更简单的'^(04 \ d)+') – Phrogz
你试过了吗? – Toto