2012-07-06 365 views
1

我不知道下面的正則表達式返回false。我看不到「|」不應該匹配。有任何想法嗎?我該如何讓模式匹配「|」?Java正則表達式與豎線

Pattern pattern = Pattern.compile("([^\\*|\\\\|\\{|\\}|\\[|\\]|=|>|<])*"); 
boolean valid = pattern.matcher("|").matches(); 

在此先感謝。

+2

你需要| (意味着或)在組?如果你有[^ ab],它會不會正常工作?你需要[^ a | b]嗎?如果這被解析爲「不是a,也不是,b也不能解釋你的情況。 – Thilo 2012-07-06 12:52:02

+1

你能指定更多你想要你的正則表達式來完成嗎?再舉幾個例子會很好。 – Keppil 2012-07-06 12:53:38

回答

2

[^ ]表達式匹配不在括號內的任何字符。由於|位於括號內,因此不匹配。除[^ ]表達式內的字符外,所有字符(除了少數幾個字符,如\])均被採用。

我想你的意思是說這樣的事情:

這符合什麼,但這些字符:

*\{}[]=>< 

爲了把它放在一個字符串,你可以這樣做:

"([^*\\\\{}[\\]=><])*" 
1

我想你誤解了正則表達式中字符類的概念:[^...]^之後的所有字符視爲正常字符,而不是元字符。因此,您不需要班級內的「OR」管道|

由於|存在於字符類中,並且因爲您使用的是^來反轉該集合,所以單個管道與您的正則表達式不匹配。

0

該打印true

System.out.println(Pattern 
      .compile("([\\||^\\*|\\||\\{|\\}|\\[|\\]|=|>|<])*") 
      .matcher("|") 
      .matches()); 

管取景器\\||(在更換\\\\|)在其他地方無法正常工作。

肯德爾弗雷解釋你如何^打擾你的正則表達式