我尝试找出如何从字符串中获取 2 个匹配 Bla bla bla [https://google.com|Google] bla bla bla [https://youtube.com|Youtube]
我想要获得 2 个匹配项:[https://google.com|Google]、[https://youtube.com|Youtube]
。
我的正则表达式看起来像这样: \[.*\|.*\]
并且我只得到一个匹配项: [https://google.com|Google] bla bla bla [ https://youtube.com|Youtube]
所以这是错误的答案。如何得到正确答案?
附注google 和 youtube - 硬编码示例。我获得包含 1000 多个条目的数据数组,因此我需要一个通用的解决方案。
最佳答案
你可以使用
\[([^\]\[|]*)\|([^\]\[]*)]
请参阅regex demo 。详情:
\[
- 一个[
字符([^\]\[|]*)
- 第 1 组:除[
、]
之外的任何零个或多个字符以及|
\|
-|
字符([^\]\[]*)
- 第 2 组:除[
和]
之外的任何零个或多个字符]
-]
字符。
在Java中,使用
String regex = "\\[([^\\]\\[|]*)\\|([^\\]\\[]*)]";
请参阅Java demo :
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
关于java - 正则表达式,获取所有超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65028617/