java - 正则表达式,获取所有超链接
问题描述
我试图弄清楚如何从 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 多个条目的数据数组,所以我需要一个通用的解决方案。
解决方案
您可以使用
\[([^\]\[|]*)\|([^\]\[]*)]
请参阅正则表达式演示。细节:
\[
- 一个[
字符([^\]\[|]*)
[
- 第 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
推荐阅读
- makefile - 为什么在构建共享库时添加具有空主函数的.cpp文件后未定义的引用消失
- c++ - 套接字通过 send() 发送的 TCP 数据包慢
- dialog - NSIS - 使用命令行参数跳过某些对话框?
- python - Python Mac地址转换格式从:到-
- laravel - Laravel 错误:“此集合实例上不存在属性 [兄弟姐妹]”
- node.js - http 内容在 https 网站问题上提供
- excel - vlookup函数excel剪切字符串的一部分
- php - 使用php通过扩展类和方法的名称检测方法的类名?
- sql - 对唯一字符和其他列使用 CHECK 约束 PostgresSQL
- ruby-on-rails - 机器人允许该网站但被识别和拒绝