求正则表达式
字符串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
字符串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
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());
}
}
不过有些BUG。。
String regex = "((a(/|\\\\)+)(?=b))?" +
"((b(/|\\\\)+)(?=c))?" +
"((c(/|\\\\)+)(?=d))?" +
"((d(/|\\\\)+)(?=e))?" +
"e";
一个/或\
String regex = "((a(/|\\\\))(?=b))?" +
"((b(/|\\\\))(?=c))?" +
"((c(/|\\\\))(?=d))?" +
"((d(/|\\\\))(?=e))?" +
"e";
不明白a-z都通用是什么意思
List<String> lstChar = new ArrayList<String>();
lstChar.add("A\\B/c\\d/e\\f.cpp");
lstChar.add("A\\B/c\\d/f.cpp");
lstChar.add("c\\d/e\\f.cpp");
lstChar.add("d/e\\f.cpp"); String strCondition = "b/c/d/f.cpp";strCondition和lstChar 中每一个元素比较,找到一个最匹配的,条件就是我之前发的那些
你测试哪有问题呢?
这已经不是正则表达式的范畴了吧,个人认为你这个要根据业务写相似度的算法你测试哪有问题呢?
这已经不是正则表达式的范畴了吧,个人认为你这个要根据业务写相似度的算法嗯 我刚才一回想也是
其实我是想根据条件查询数据库,SQL中可以输入正则表达式
看来还是要模糊匹配最后一节,查出列表来,然后用算法处理结果,找到最匹配的
要不你写下java代码~~~
这已经不是正则表达式的范畴了吧,个人认为你这个要根据业务写相似度的算法你测试哪有问题呢?
这已经不是正则表达式的范畴了吧,个人认为你这个要根据业务写相似度的算法嗯 我刚才一回想也是
其实我是想根据条件查询数据库,SQL中可以输入正则表达式
看来还是要模糊匹配最后一节,查出列表来,然后用算法处理结果,找到最匹配的
要不你写下java代码~~~
看样子像是要找文件路径,文件路径的话应该从最后面开始一层一层目录进行匹配知道剩下找到最后一个幸存者,是这样吗?
这已经不是正则表达式的范畴了吧,个人认为你这个要根据业务写相似度的算法你测试哪有问题呢?
这已经不是正则表达式的范畴了吧,个人认为你这个要根据业务写相似度的算法嗯 我刚才一回想也是
其实我是想根据条件查询数据库,SQL中可以输入正则表达式
看来还是要模糊匹配最后一节,查出列表来,然后用算法处理结果,找到最匹配的
要不你写下java代码~~~
看样子像是要找文件路径,文件路径的话应该从最后面开始一层一层目录进行匹配知道剩下找到最后一个幸存者,是这样吗?
不是的
我当前的做法是
1:先过滤斜杠,正反斜杠统一转化为|
2:倒叙排列两个字符串
3:挨个字符比较,得到匹配的最大数
4:取出匹配最多的那些字符串,然后看和条件字符串是否是子集关系,如果是就放到结果集中