日期:2014-05-18  浏览次数:20642 次

求比较复杂的正则表达式
求正则表达式
字符串A为a/b/c/d/e,去匹配一组字符串中的一个/多个,条件是:
1:忽略分隔符为正反斜杠和大小写,例如可以匹配出A/B/c\d\E
2:包含匹配,字符串A必须是匹配结果的子集,或是匹配结果必须是字符串A的子集,如果有相同的则取出相同的
例如可以匹配出k\m/a/b/c/d\E和C\d\E
如果目标字符串中有A/B/c\d\E则选出这个,不会选出k\m/a/b/c/d\E和C\d\E
3:结果必须以字符串A中的最后一个字符结尾,即e
正则表达式 java

------解决方案--------------------
	public static void main(String[] args) {
String str = "k\\m/a/b/c/d/E";
Pattern pattern = Pattern.compile("([a-z][/\\\\])*(a[/\\\\])?(b[/\\\\])?(c[/\\\\])?(d[/\\\\])?e",Pattern.CASE_INSENSITIVE);
Matcher m = pattern.matcher(str);
while(m.find()) {
System.out.println(m.group());
}
}

------解决方案--------------------
一个以上/或\
String regex = "((a(/
------解决方案--------------------
\\\\)+)(?=b))?" +
"((b(/
------解决方案--------------------
\\\\)+)(?=c))?" +
"((c(/
------解决方案--------------------
\\\\)+)(?=d))?" +
"((d(/
------解决方案--------------------
\\\\)+)(?=e))?" +
"e";
一个/或\
String regex = "((a(/
------解决方案--------------------
\\\\))(?=b))?" +
"((b(/
------解决方案--------------------
\\\\))(?=c))?" +
"((c(/
------解决方案--------------------
\\\\))(?=d))?" +
"((d(/
------解决方案--------------------
\\\\))(?=e))?" +
"e";