You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:50:16