gpt4 book ai didi

java正则表达式得到超过需要的东西

转载 作者:行者123 更新时间:2023-11-30 03:06:21 25 4
gpt4 key购买 nike

我有以下正则表达式

http://[a-z./].*(js)

和字符串

efwefewfhttp://assets.main.com/zepto-1.1.3.min.js fffhttp://assets.main.com/zepto-1.1.3.min.js

代码:

List<String> kk = new ArrayList<String>();

while (urlMatcher.find()){
kk.add(urlMatcher.group());
}

这个正则表达式输出是

http://assets.main.com/zepto-1.1.3.min.js fffhttp://assets.main.com/zepto-1.1.3.min.js

但结果应该是 2 个字符串

如何更改正则表达式以获得两个字符串作为结果?

最佳答案

使用以下具有惰性点匹配模式的正则表达式:

http://[a-z./].*?js
^

请参阅regex demo

这样,您将匹配 http://assets.main.com/zepto-1.1.3.min.jshttp://assets.main.com/zepto -1.1.3.min.js.

问题是 .* 匹配整行,然后回溯,检查它是否可以容纳右侧模式。因此它匹配最长的可能子字符串(从最左边到最右边)。惰性匹配将从最左边匹配到下一个子模式的第一次出现,产生 2 个匹配。

参见Watch Out for The Greediness!部分。

此外,由于这些是链接,并且不应有空格,因此您可以使用 \S (非空白)简写字符类:

http://[a-z./]\S*\.js

此外,文字点可以与 \. 匹配。请参阅another demo .

应尽可能避免惰性/贪婪点匹配,因为它们可能涉及大量回溯!

Sample code :

String str = "efwefewfhttp://assets.main.com/zepto-1.1.3.min.js fffhttp://assets.main.com/zepto-1.1.3.min.js";
Pattern ptrn = Pattern.compile("http://[a-z./]\\S*\\.js");
Matcher urlMatcher = ptrn.matcher(str);
List<String> kk = new ArrayList<String>();
while (urlMatcher.find()){
kk.add(urlMatcher.group());
}
System.out.println(kk);
// [http://assets.main.com/zepto-1.1.3.min.js, http://assets.main.com/zepto-1.1.3.min.js]

关于java正则表达式得到超过需要的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34687828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com