2010-03-28 52 views
3

我敢肯定,這已被問過,但我似乎無法找到它(或不知道正確的寫法搜索)正則表達式匹配所有的一套,除了某幾個

基本上我想要一個正則表達式匹配除連字符以外的所有非字母數字。所以基本上匹配\ W +除了排除' - '我不知道如何從預製集合中排除特定的。

回答

8

\W是​​的簡寫。所以:

[^\w-]+ 

一點背景:

  • […]定義了一組
  • [^…]否定一套
  • 通常,每\v(smallcase)組由\V(大寫)否定其中V是定義一個集合的任何字母。
  • 國際字符,你可能想看看[[:alpha:]][[:alnum:]]
+0

謝謝,知道這將會是容易的 – Davy8 2010-03-28 05:43:28

1
[^\w-]+ 

會做到這一點。匹配連字符以外的任何不在\w集合中的字符。

1

您可以使用:

[^a-zA-Z0-9_-] 

[^\w-] 

匹配單個非連字符,非-alphanumeric。要匹配一個或多個前綴爲+

+0

下劃線丟失(以及大量的重音字符,如果他的正則表達式將ä,ß或à等字符視爲'\ w'的一部分)... – 2010-03-28 05:38:11

0

在Java7或更高版本中,您需要預先配置(?U)以匹配所有特定於語言環境的字符。例如

(?U)[^\w-] 

在Java字符串(你需要逃避\字符與另一個):

(?U)[^\\w-]