2011-11-21 142 views
0

鉴于此输入之间的区别:是什么,这些正则表达式

ESAS NO  :2005-238 

这2正则表达式不匹配:

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

但是这一次匹配:

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

我以为所有以上的会/应该表现平等,但他们不是。那些有什么区别?

回答

5

\w匹配任何字母数字字符,包括数字,即它与[A-Za-z0-9_]大致相同。

+1

+1,但取决于正则表达式引擎,它可能比这更匹配。例如,在.NET中,'\ w'匹配所有Unicode字母,数字和“连接标点符号”。 –

+0

@TimPietzcker,这就是为什么我说“大致相同”。 – Kusalananda

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或​​您明确排除[a-zA-Z0-9_]手段。请注意,0-9已从匹配​​集中排除,但在您的字符串中有需要匹配的数字。

+0

您引用的内容不是IMO的有用说明。你自己的话会更好地解释差异。 – BoltClock

+0

的确,固定它。 – halfdan