是否有可能在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”怎么样? –
使用这种方法也可以让你比使用正则表达式更容易提供错误报告。例如,您可以为每个检查打印一条消息“错误:不匹配___”。 –