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

Java中正则表达式匹配特定首尾格式字符串问题求解

错误原因排查

你写的正则存在3个核心问题:

  • 空格数量限制不符合要求:规则允许符号间有0-5个空格,你正则中写的是\\s{0,3},仅支持最多3个空格,不符合规则
  • 中间内容匹配逻辑错误:你用单个.匹配前缀后缀之间的内容,只能匹配1个任意字符,且直接和后缀的>拼接,完全不满足「前缀后缀之间可为任意内容」的要求
  • 缺少匹配模式适配:.默认无法匹配换行符,若你的内容包含换行会直接匹配失败
正确实现方案

场景1:匹配整个输入字符串完全符合规则

// Pattern.DOTALL 作用是让.可以匹配换行符,^匹配字符串开头,$匹配字符串结尾
Pattern pattern = Pattern.compile("^<\\s{0,5}<\\s{0,5}\\*\\s{0,5}<\\s{0,5}.*?\\s{0,5}>\\s{0,5}>\\s{0,5}\\*\\s{0,5}>\\s{0,5}>$", Pattern.DOTALL);

场景2:从长文本中提取符合规则的子串

// 去掉首尾的^和$,非贪婪匹配.*?避免多个符合规则的子串出现匹配重叠
Pattern pattern = Pattern.compile("<\\s{0,5}<\\s{0,5}\\*\\s{0,5}<\\s{0,5}.*?\\s{0,5}>\\s{0,5}>\\s{0,5}\\*\\s{0,5}>\\s{0,5}>", Pattern.DOTALL);
正则规则对应说明
  • 前缀部分:<\\s{0,5}<\\s{0,5}\\*\\s{0,5}< 严格匹配两个<、一个*、一个<的顺序,相邻符号之间允许0-5个空格
  • 中间部分:.*? 采用非贪婪匹配任意长度的内容,搭配Pattern.DOTALL可覆盖包含换行的场景
  • 后缀部分:\\s{0,5}>\\s{0,5}>\\s{0,5}\\*\\s{0,5}>\\s{0,5}> 严格匹配两个>、一个*、两个>的顺序,相邻符号之间允许0-5个空格

内容的提问来源于stack exchange,提问作者Lee Andrew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 15:21:00