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

文本内容如下:

节点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个回答

 节点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>
I7707557
I7707557 我是从word中提取某个节点内容,比如【 病案首页 。。。。病案首页的内容。。。】想要提取 病案首页之后的内容。但是真实情况是,在病案首页内容之后,跟随的有可能是 主诉,有可能是 医嘱,这种不确定性就决定了,我需要或的关系进行匹配
4 年多之前 回复
I7707557
I7707557 回复showbo: 谢谢回复,我的需求是 我是从word中提取某个节点内容,比如【 病案首页 。。。。病案首页的内容。。。】想要提取 病案首页之后的内容。但是真实情况是,在病案首页内容之后,跟随的有可能是 主诉,有可能是 医嘱,这种不确定性就决定了,我需要或的关系进行匹配
4 年多之前 回复
showbo
支付宝加好友偷能量挖,胡杨在等着我的召唤 回复I7707557: 有规则就能获取,没有规则你自己前后截取不就行了,先判断开始字符有没有,没有说明没有指定内容,有就找结束字符,然后进行截取
4 年多之前 回复
I7707557
I7707557 感谢showbo,但是不是简单的 节点\d+ 可以匹配的,真实情况是,要匹配的字符串很复杂
4 年多之前 回复

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

I7707557
I7707557 回复男哥: 我是从word中提取某个节点内容,比如【 病案首页 。。。。病案首页的内容。。。】想要提取 病案首页之后的内容。但是真实情况是,在病案首页内容之后,跟随的有可能是 主诉,有可能是 医嘱,这种不确定性就决定了,我需要或的关系进行匹配
4 年多之前 回复
I7707557
I7707557 回复男哥: 我是从word中提取某个节点内容,比如【 病案首页 。。。。病案首页的内容。。。】想要提取 病案首页之后的内容。但是真实情况是,在病案首页内容之后,跟随的有可能是 主诉,有可能是 医嘱,这种不确定性就决定了,我需要或的关系进行匹配
4 年多之前 回复
I7707557
I7707557 回复男哥: 想要实现的效果,是 匹配与节点2最近的那个匹配内容,也就是说,a(.*)(b|c) 当刚刚出现b或者c时,就满足匹配条件,之后的就无需匹配了,相当于或的关系
4 年多之前 回复
I7707557
I7707557 回复男哥: 要的男哥。。。我名字也带个男,好巧啊。感谢您。不过这个式子,匹配出来后,仍然是【节点3 节点4】
4 年多之前 回复
jiaowonange8
男哥 要考虑换行符吗
4 年多之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问