Java中MD转HTML:正则条件捕获分组问题求助
解决Markdown带尺寸提示链接的正则匹配问题
修改后的正则表达式
使用以下正则可匹配所有测试行,并条件捕获引号内的尺寸关键词:
\[(.*?)\]\((.*?)(?:\s+"(icon|small|medium|big)")?\)
正则说明
\[(.*?)\]:非贪婪匹配方括号内的链接文本,避免多链接场景下的过度匹配\((.*?):非贪婪匹配括号内的URL,确保不会把后续尺寸提示内容包含进来(?:\s+"(icon|small|medium|big)")?:?:标记为非捕获组,避免额外捕获整个尺寸提示片段?表示整个尺寸提示部分为可选,适配无提示的链接行\s+匹配URL与引号间的一个或多个空格,兼容格式小差异(icon|small|medium|big)精准捕获指定的尺寸关键词
Java代码示例
Java中使用需转义反斜杠,示例代码如下:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class MarkdownLinkParser { public static void main(String[] args) { String markdown = "[link 1](https://aka.ms/aadrecoverykey "icon")\n" + "[link 1](https://aka.ms/aadrecoverykey "small")\n" + "[link 1](https://aka.ms/aadrecoverykey "medium")\n" + "[link 1](https://aka.ms/aadrecoverykey "big")\n" + "[link 2](http://myaccount.microsoft.com)"; String regex = "\\[(.*?)\\]\\((.*?)(?:\\s+"(icon|small|medium|big)")?\\)"; Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); Matcher matcher = pattern.matcher(markdown); while (matcher.find()) { String linkText = matcher.group(1); String url = matcher.group(2); String sizeHint = matcher.group(3); // 前四行有值,第五行为null System.out.println("链接文本: " + linkText); System.out.println("URL: " + url); if (sizeHint != null) { System.out.println("尺寸提示: " + sizeHint); } System.out.println("---"); } } }
匹配效果
- 前4行:成功捕获链接文本、URL和对应的尺寸关键词(icon/small/medium/big)
- 第5行:捕获链接文本和URL,尺寸提示分组返回
null,符合需求
内容的提问来源于stack exchange,提问作者Jan Šebek
相关产品推荐
相关产品推荐

