Java 语言有个简单的正则不会写了...

2020-01-06 15:10:07 +08:00
 JavaFirstMaster
public class SimpleTest {

    @Test
    public void test() {
        String s = "https://www.baidu.comhttp://abc.com/abc.jpg";
        Matcher matcher = Pattern.compile("https?://.+").matcher(s);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

如上代码, 我想把字符串分割成两个正确的 url, 可是上面的正则始终是"贪婪模式", 一下子匹配到整个字符串.

如果正则写成 https?://.+?, 又只会匹配到如下结果:

有没有帅气堪比吴彦祖的朋友解答一下我的疑惑呀

1329 次点击
所在节点    问与答
4 条回复
iyaozhen
2020-01-06 15:33:37 +08:00


https?:\/\/.+?(?=http|$)

有个非常拗口的翻译:零宽断言 https://deerchao.cn/tutorials/regex/regex.htm#lookaround
JavaFirstMaster
2020-01-06 16:04:44 +08:00
@iyaozhen 非常正确!

我之前想到这个了, 不过差了一点, 我写的是 `https?://.+(?=https?://|$)`, 外部的 `.+` 后面没有指定非贪婪模式!

谢谢吴彦祖!!
optional
2020-01-06 16:46:29 +08:00
这个需求直接 split( http)似乎更好啊。
JavaFirstMaster
2020-01-06 17:16:42 +08:00
@optional 字符串中包含的网址数量不定, 而且 http 或者 https 位置也不确定, 所以 split 的话比较麻烦

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

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

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

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

© 2021 V2EX