java - 正则表达式,获取所有超链接

标签 java regex

我尝试找出如何从字符串中获取 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/

相关文章:

Java 创建一个 api 来公开 csv 而不是 json

java - 如何android单元测试和模拟静态方法

regex - 如何在 Perl 中找到正则表达式匹配的位置?

数字后跟点 (.) 的正则表达式

java - 替换java中的某些字符

java - 边框布局();按钮不显示

java - 如何修复 Spring Security 中的角色?

javascript - 如果已经是另一个匹配的一部分,则最短的正则表达式匹配

java - 在日期字段 : Java 中不能使用超过 "2038"的年份

java - Java中通过正则表达式从字符串中提取数字