问题描述
- 求助正则达人一个棘手的简单问题
-
文本内容如下:节点1
节点2
节点3
节点4
节点5
节点6需求:想要匹配 以“节点2"为开头起始,以"节点4"【或】"节点5"为结束字符串之间的文本(以最近的一个结束字符串为准<例子中期待匹配的内容是【节点4】>)
自己写的垃圾式子: “ 节点2([sS]*)(?:节点4|节点5) ”
结果集中取$1的结果,但是取出内容是“【节点3 节点4】”
上面的结果不是我想要的,我想要的是匹配结果为 “【节点3】”,即,以距离节点2最近的节点4位匹配结果,想要实现当匹配了 节点2->节点4 就不匹配 节点2 -> 节点5 之间的内容了
ps::有没有比类似 节点2(^节点4|节点5)(?:节点4|节点5) 更好的表达式
解决方案
节点2([sS]+?)节点[45]
<script>
var s = '节点1 节点2 节点3 节点4 节点5 节点6';
var m = /节点2([sS]+?)节点[45]/.exec(s);
alert(m[1])
s = '节点1 节点2 节点3 节点xxx 节点5 节点4 节点6';
m = /节点2([sS]+?)节点[45]/.exec(s);
alert(m[1])
</script>
解决方案二:
求助一个问题
解决方案三:
String str = "节点2节点3节点5节点4";
String match = "^节点2{1}.*(节点5|节点4){1}$";//以节点2 开始,节点4或节点5结束
System.out.println(str.matches(match));
解决方案四:
好了我自己恶补一晚上正则,自己解决了,感谢回答我的两个朋友。就差一个元字符——非贪婪模式即可
时间: 2024-08-04 03:00:49