这些正则表达之间有什么区别

时间:2011-11-21 13:42:27

标签: regex

鉴于此输入:

ESAS NO     :2005-238

这两个正则表达式不匹配:

esas\s+(no)?\s*:([^\w]+)
esas\s+(no)?\s*:([\W]+)

但是这个匹配:

esas\s+(no)?\s*:([^a-zA-Z]+)

我认为以上所有会/应该表现得一样,但事实并非如此。这些之间有什么区别?

2 个答案:

答案 0 :(得分:6)

\w匹配任何字母数字字符,包括数字,即它与[A-Za-z0-9_]和/大致相同,但可能取决于区域设置。

答案 1 :(得分:1)

查看\w的说明:

\w    A word character is a character from a-z, A-Z, 0-9, including the _ (underscore) character.
\W    The negated version of \w

这意味着您可以使用\W[^\w]明确排除[a-zA-Z0-9_]。请注意,0-9已从匹配集中排除,但在您的字符串中,您需要匹配数字。