是否有可能在Java中編寫與字符部分匹配的正則表達式?例如,我想搜索字符串'ab','cd'和'ef'。一場比賽應該在下面的例子將返回:Java正則表達式 - 字的部分
[lab stef ecde], [lecde effe aaaab]
所以,如果所有字符串(「AB」,「CD」,「EF」)是在文本的任何地方單詞的一部分匹配應返回 - 爲了不進口。 但是比賽不應該被若有字符串丟失
[lab stef]
是否有可能在Java中編寫與字符部分匹配的正則表達式?例如,我想搜索字符串'ab','cd'和'ef'。一場比賽應該在下面的例子將返回:Java正則表達式 - 字的部分
[lab stef ecde], [lecde effe aaaab]
所以,如果所有字符串(「AB」,「CD」,「EF」)是在文本的任何地方單詞的一部分匹配應返回 - 爲了不進口。 但是比賽不應該被若有字符串丟失
[lab stef]
發現每串輸入和&&
產生的boolean
值返回。
String s = "lab stef ecde";
boolean ab = s.indexOf("ab") > -1;
boolean cd = s.indexOf("cd") > -1;
boolean ef = s.indexOf("ef") > -1;
boolean match = ab && cd && ef; // true
編輯
在德國有一句諺語:
Warum einfach wenn es auch kompliziert geht?
"Why simple when you can do it complicated?"
這就是我想在這種情況下,正則表達式。
如果它不一定是正則表達式然後Tichodroma's answer是你正在尋找的。
但如果你真的需要複雜的生活,並使用正則表達式,你可以嘗試使用環視機制,例如look ahead和創造這樣
"lab stef ecde".matches("(?=.*ab)(?=.*cd)(?=.*ef).*") //true
"lab stef".matches("(?=.*ab)(?=.*cd)(?=.*ef).*") //false
更清楚地解釋:在
(?=.*ab)(?=.*cd)(?=.*ef).*
(?=.*ab)
會檢查你的字符串包含.*ab
其中.*
將匹配ab
部分之前的任何字符。(?=.*cd)
和(?=.*ef)
.*
包括,因爲matches
檢查,如果整個字符串我們正則表達式匹配,所以我們需要在整個字符串莫名其妙迭代。這樣做:
^.*(ab.*cd.*ef|ab.*ef.*cd|cd.*ab.*ef|cd.*ef.*ab|ef.*ab.*cd|ef.*cd.*ab).*$
你可以在這裏進行測試:http://www.regexplanet.com/advanced/java/index.html
我相信這是矯枉過正,但。另一個優化的解決方案會更好。
不是很好,容易出錯。 – 2013-07-04 13:52:52
是的,你不會用純正則表達式解決這個問題。廢話 – Multithreader
是的,如果你匹配常量字符串,使用正則表達式是a)比你需要更復雜,b)更昂貴。 – CosmicComputer
「abcdef」怎麼樣? –
使用這種方法也可以讓你比使用正則表達式更容易提供錯誤報告。例如,您可以爲每個檢查打印一條消息「錯誤:不匹配___」。 –