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

Java正则匹配:排除行首行尾的至少两个连续星号分隔符

解决方案

要提取至少两个连续星号且既不在行首也不在行尾的子串,核心是通过环视断言排除行首/行尾的星号序列,以下是两种可靠的正则方案:

方案1:基于行首行尾的负向环视

正则表达式:

(?<!^)\*{2,}(?!$)

逻辑说明:

  • (?<!^):负向后行断言,确保星号序列不是从行首开始(即序列前有其他字符)
  • \*{2,}:匹配至少两个连续星号
  • (?!$):负向前瞻断言,确保星号序列不是到行尾结束(即序列后有其他字符)

方案2:基于非星号字符的正向环视

如果需要更严格地确保星号前后都是非星号字符(避免星号序列嵌套在更长星号串中间的情况),可以用:

(?<=[^*])\*{2,}(?=[^*])

逻辑说明:

  • (?<=[^*]):正向后行断言,确保星号序列前一个字符不是星号(自然排除行首情况,因为行首无字符)
  • \*{2,}:匹配至少两个连续星号
  • (?=[^*]):正向前瞻断言,确保星号序列后一个字符不是星号(自然排除行尾情况)

测试验证

针对你提供的示例文本:

*** DRIVER FEE -10.00/DAY - SPOUSE ALSO CHARGED ****QUALIFICATIONS FOR RENTERS FROM NON US COUNTRIES*** -MUST HAVE A *** VALID DRIVERS LICENSE***

两个正则都会精准匹配到:

  • ****(QUALIFICATIONS前的星号序列)
  • ***(COUNTRIES后的星号序列)
  • ***(VALID前的星号序列)
    同时自动排除行首的***和行尾的***,完全符合需求。

为什么之前的\b/\B方案无效?

\b是单词边界(仅在单词字符\w和非单词字符\W的分界处触发),而星号属于非单词字符\W,当星号前后都是非单词字符(比如空格)时,\b不会触发,无法准确区分行首/行尾的星号序列,因此不适合这类场景。

内容的提问来源于stack exchange,提问作者Stefano Falconetti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:05:28