首页 > 解决方案 > 正则表达式,获取所有超链接

问题描述

我试图弄清楚如何从 String 获得 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]所以这是错误的答案。如何得到正确答案?

PS google 和 youtube - 硬编码示例。我得到了包含 1000 多个条目的数据数组,所以我需要一个通用的解决方案。

标签: javaregex

解决方案


您可以使用

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

请参阅正则表达式演示。细节:

  • \[- 一个[字符
  • ([^\]\[|]*)[- 第 1 组:除,之外的任何]零个或多个字符|
  • \|- 一个|字符
  • ([^\]\[]*)[- 第 2 组:除and之外的任何零个或多个字符]
  • ]- 一个]字符。

在 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

推荐阅读