我不知道下面的正則表達式返回false。我看不到「|」不應該匹配。有任何想法嗎?我該如何讓模式匹配「|」?Java正則表達式與豎線
Pattern pattern = Pattern.compile("([^\\*|\\\\|\\{|\\}|\\[|\\]|=|>|<])*");
boolean valid = pattern.matcher("|").matches();
在此先感謝。
我不知道下面的正則表達式返回false。我看不到「|」不應該匹配。有任何想法嗎?我該如何讓模式匹配「|」?Java正則表達式與豎線
Pattern pattern = Pattern.compile("([^\\*|\\\\|\\{|\\}|\\[|\\]|=|>|<])*");
boolean valid = pattern.matcher("|").matches();
在此先感謝。
[^ ]
表達式匹配不在括號內的任何字符。由於|
位於括號內,因此不匹配。除[^ ]
表達式內的字符外,所有字符(除了少數幾個字符,如\
和]
)均被採用。
我想你的意思是說這樣的事情:
這符合什麼,但這些字符:
*\{}[]=><
爲了把它放在一個字符串,你可以這樣做:
"([^*\\\\{}[\\]=><])*"
我想你誤解了正則表達式中字符類的概念:[^...]
將^
之後的所有字符視爲正常字符,而不是元字符。因此,您不需要班級內的「OR」管道|
。
由於|
存在於字符類中,並且因爲您使用的是^
來反轉該集合,所以單個管道與您的正則表達式不匹配。
該打印true
:
System.out.println(Pattern
.compile("([\\||^\\*|\\||\\{|\\}|\\[|\\]|=|>|<])*")
.matcher("|")
.matches());
但管取景器\\||
(在更換\\\\|
)在其他地方無法正常工作。
肯德爾弗雷解釋你如何^
打擾你的正則表達式
你需要| (意味着或)在組?如果你有[^ ab],它會不會正常工作?你需要[^ a | b]嗎?如果這被解析爲「不是a,也不是,b也不能解釋你的情況。 – Thilo 2012-07-06 12:52:02
你能指定更多你想要你的正則表達式來完成嗎?再舉幾個例子會很好。 – Keppil 2012-07-06 12:53:38