Java 正则表达式中,能否利用 group 之间的关系来写简化 pattern 的字符串

2019-12-18 16:15:53 +08:00
 MOONLIGHTT

直接举例子吧,例如:

我的 pattern 中有 3 个 group,构造的正则表达式为

String = "(group1)(group2)(group3)";

我的情况为:

group2为不匹配 group3 的任何内容。我尝试过将 group(2)写为.*(.能够匹配换行符),按照 stackoverflow 的说法,我用matcher.find()方法搜索匹配的内容时,使用的匹配策略是非贪婪的,因此.*应该能匹配到group3第一次出现之前和group1出现之后的内容,但在实际测试过程中,发现.*还是进行了贪婪的匹配(即匹配到最后一次group3出现之前)

有没有带哥知道这种情况下该怎么处理。。。。。

1451 次点击
所在节点    程序员
3 条回复
MOONLIGHTT
2019-12-18 16:23:55 +08:00
把这个问题描述清楚之后,就有了答案。。。。在 String 的 pattern 写法里面已经暗含了匹配的方式为贪婪或者非贪婪

在[这里]( https://blog.csdn.net/huangmeimao/article/details/72723173)有详细说明。

另外,想吐槽一下 google,用英文搜索的搜索结果真的是越来越差了。。。。
KentY
2019-12-18 16:29:21 +08:00
不明白你中文描述的问题是什么。
.* 一直都是 greedy 不管在哪。
英文搜索还挺精准呀。
你的链接 404
MOONLIGHTT
2019-12-18 16:41:55 +08:00
@KentY

我的表达能力确实有些欠缺,所以正在锻炼。。。。

嗯嗯,把 greedy 的写法.*,换成非 greedy 的写法 .*? 问题就解决了

英文搜索的话,往往是 github issue 和 stackoverflow 才能解决问题

我是按照 md 的方式写的连接

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/630221

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX