I7707557
I7707557
采纳率25%
2016-01-13 02:27 阅读 1.4k

求助正则达人一个棘手的简单问题

文本内容如下:

节点1
节点2
节点3
节点4
节点5
节点6

需求:想要匹配 以“节点2"为开头起始,以"节点4"【或】"节点5"为结束字符串之间的文本(以最近的一个结束字符串为准<例子中期待匹配的内容是【节点4】>)

自己写的垃圾式子: “ 节点2([\s\S]*)(?:节点4|节点5) ”
结果集中取$1的结果,但是取出内容是“【节点3 节点4】”
上面的结果不是我想要的,我想要的是匹配结果为 “【节点3】”,即,以距离节点2最近的节点4位匹配结果,想要实现当匹配了 节点2->节点4 就不匹配 节点2 -> 节点5 之间的内容了
ps::有没有比类似 节点2(^节点4|节点5)(?:节点4|节点5) 更好的表达式

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • showbo GoCityPass新加坡曼谷通票 2016-01-13 03:05
     节点2([\s\S]+?)节点[45]
    
     <script>
        var s = '节点1    节点2    节点3    节点4    节点5    节点6';
        var m = /节点2([\s\S]+?)节点[45]/.exec(s);
        alert(m[1])
        s = '节点1    节点2    节点3    节点xxx    节点5    节点4    节点6';
        m = /节点2([\s\S]+?)节点[45]/.exec(s);
        alert(m[1])
    </script>
    
    点赞 1 评论 复制链接分享
  • jiaowonange8 男哥 2016-01-13 03:03

    String str = "节点2节点3节点5节点4";
    String match = "^节点2{1}.*(节点5|节点4){1}$";//以节点2 开始,节点4或节点5结束
    System.out.println(str.matches(match));

    点赞 评论 复制链接分享
  • I7707557 I7707557 2016-01-14 01:33

    好了我自己恶补一晚上正则,自己解决了,感谢回答我的两个朋友。就差一个元字符——非贪婪模式即可

    点赞 评论 复制链接分享

相关推荐