regex,获取所有超链接

xmjla07d  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(397)

我试着从字符串中找出2个匹配项 Bla bla bla [https://google.com|Google] bla bla bla [https://youtube.com|Youtube] 我想要两个匹配项: [https://google.com|Google], [https://youtube.com|Youtube] . 我的正则表达式看起来像这样: \[.*\|.*\] 我只得到一个匹配项: [https://google.com|Google] bla bla bla [https://youtube.com|Youtube] 所以这是错误的答案。如何得到正确答案?
p、 这是一个硬编码的例子。我得到的数据数组有1000多个条目,所以我需要一个通用的解决方案。

3pvhb19x

3pvhb19x1#

你需要用加法使量词变懒吗?马克,举个例子:

String  s = "Bla bla bla [https://google.com|Google] bla bla bla [https://youtube.com|Youtube]";
Pattern p = Pattern.compile("\\[.*?\\]");
Matcher matcher = p.matcher(s);

while(matcher.find()){
    System.out.println(matcher.group());
}

输出:

[https://google.com|Google]
[https://youtube.com|Youtube]
r9f1avp5

r9f1avp52#

你可以用

\[([^\]\[|]*)\|([^\]\[]*)]

查看regex演示。细节: \[ -a [ 烧焦 ([^\]\[|]*) -第1组:除 [ , ] 以及
| \| -a | 烧焦 ([^\]\[]*) -第2组:除 [ 以及
] ] -a ] 烧焦。
在java中,使用

String regex = "\\[([^\\]\\[|]*)\\|([^\\]\\[]*)]";

请参见java演示:

String s = "Bla bla bla [https://google.com|Google] bla bla bla [https://youtube.com|Youtube]";
String regex = "\\[([^\\]\\[|]*)\\|([^\\]\\[]*)]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println("Match: " + matcher.group(0));
    System.out.println("Group 1: " + matcher.group(1));
    System.out.println("Group 2: " + matcher.group(2));
}

输出:

Match: [https://google.com|Google]
Group 1: https://google.com
Group 2: Google
Match: [https://youtube.com|Youtube]
Group 1: https://youtube.com
Group 2: Youtube

相关问题