请教个正则问题

tcamw_gcab 2014-08-11 06:06:07
String a = "C:\\dd\\hellokity\\Desktop\\20140808DLBANK\\lianaCore\\aa\\lianaCore\\c\\lianaCore\\";
// String c = "^.?:{1}(\\\\{1}(\\w+[^(lianaCore|perbank)]))+(\\\\(lianaCore|perbank){1})*+";
// String c = "^.?:{1}(\\\\{1}(\\w+)[^(lianaCore|perbank)])*";
// String c = "^.?:{1}(\\\\{1}(\\w+)(?!.*(lianaCore|perbank)))*";
Pattern p = Pattern.compile(c);
Matcher m = p.matcher(a);
p(m.matches());
m.reset();
p(m.find());
p(m.group(1));
p(m.start()+"----"+m.end());
如何用正则取出字符串a中从开始到第一个lianaCore或perbank间的字符串
...全文
235 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lunabird 2014-08-18
  • 打赏
  • 举报
回复
引用 6 楼 yankaiwuzhengbo 的回复:
[quote=引用 1 楼 Erorr 的回复:]

        String a = "C:\\dd\\hellokity\\Desktop\\20140808DLBANK\\lianaCore\\aa\\lianaCore\\c\\lianaCore\\";
        String c = "^(.*?)(lianaCore|perbank)";
        Pattern p = Pattern.compile(c);
        Matcher m = p.matcher(a);

        if (m.find()) {
            System.out.println(m.group(1));
        }
谢谢,受用了,很好很强大,不过我想知道(.*?)这里*和?连在一起是什么意思啊,谢谢!!![/quote] *和+都是所谓的“贪婪型”元字符,它们在进行匹配时的行为模式是多多益善而不是适可而止的,所以它们会尽可能的从一段文本的开头一直匹配到这段文本的末尾,而不是从这段文本的开头匹配到碰到第一个匹配时为止。 在不需要这种“贪婪行为”的时候,我们可以使用这些元字符的懒惰版本,懒惰型元字符的写法很简单,只要给贪婪型元字符加上一个?后缀即可。如下: * 对应的懒惰型: *? + 对应的懒惰型: +? 意思就是找到第一个lianaCore|perbank就停止匹配啦~
tony4geek 2014-08-12
  • 打赏
  • 举报
回复
引用 2 楼 tcamw_gcab 的回复:
谢谢Erorr String a = "C:\\dd\\hellokity\\Desktop\\20140808DLBANK\\lianaCore\\aa\\lianaCore\\c\\lianaCore\\"; 我用了这个 String c = "^[a-zA-Z]?:{1}(\\\\{1}(\\w+)(?<!(lianaCore|perbank)))*"; 输出结果是 C:\dd\hellokity\Desktop\20140808DLBANK\lianaCor 能不能改改达到二楼的效果
直接1楼的很好的
tony4geek 2014-08-12
  • 打赏
  • 举报
回复
 String  c = "^[a-zA-Z]?:{1}(\\\\{1}(\\w+).*?(lianaCore|perbank))";
tcamw_gcab 2014-08-12
  • 打赏
  • 举报
回复
谢谢Erorr String a = "C:\\dd\\hellokity\\Desktop\\20140808DLBANK\\lianaCore\\aa\\lianaCore\\c\\lianaCore\\"; 我用了这个 String c = "^[a-zA-Z]?:{1}(\\\\{1}(\\w+)(?<!(lianaCore|perbank)))*"; 输出结果是 C:\dd\hellokity\Desktop\20140808DLBANK\lianaCor 能不能改改达到二楼的效果
yuhouqingchen_2648 2014-08-12
  • 打赏
  • 举报
回复
引用 1 楼 Erorr 的回复:

        String a = "C:\\dd\\hellokity\\Desktop\\20140808DLBANK\\lianaCore\\aa\\lianaCore\\c\\lianaCore\\";
        String c = "^(.*?)(lianaCore|perbank)";
        Pattern p = Pattern.compile(c);
        Matcher m = p.matcher(a);

        if (m.find()) {
            System.out.println(m.group(1));
        }
谢谢,受用了,很好很强大,不过我想知道(.*?)这里*和?连在一起是什么意思啊,谢谢!!!
  • 打赏
  • 举报
回复
mark下,回头再看
Erorr 2014-08-11
  • 打赏
  • 举报
回复

        String a = "C:\\dd\\hellokity\\Desktop\\20140808DLBANK\\lianaCore\\aa\\lianaCore\\c\\lianaCore\\";
        String c = "^(.*?)(lianaCore|perbank)";
        Pattern p = Pattern.compile(c);
        Matcher m = p.matcher(a);

        if (m.find()) {
            System.out.println(m.group(1));
        }

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧