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

如何编写正则表达式匹配单引号(')内的连字符(-)

匹配单引号内连字符的正则解决方案

要实现仅匹配单引号(')内的连字符(-),可以通过正则环视规则限定匹配范围,确保连字符处于一对未嵌套的单引号内部。

适配多数正则引擎(如PHP、Ruby等PCRE环境)的正则表达式

-(?=(?:[^']*'[^']*')*[^']*')

规则解释

  • -:直接匹配目标连字符
  • (?=...):正向预查,确保当前位置后的内容满足以下条件:
    • (?:[^']*'[^']*')*:匹配任意数量的“非单引号字符+单引号+非单引号字符+单引号”组合(即成对闭合的单引号)
    • [^']*':匹配最后一组未闭合的单引号,以此确认当前连字符处于一对有效的单引号内部

兼容JavaScript等受限引擎的方案

如果你的正则引擎不支持复杂预查,可分两步处理:

  1. 先匹配所有单引号内的完整内容:
    '[^']+'
    
  2. 对每个匹配结果(去除首尾单引号),单独提取其中的-即可。

示例验证

针对测试数据:

( NOT TABLE-FIELD BEWEEN 'XX-XX'  AND 'XX-XX'  ) AND ( TABLE-FIELD = 'XXX-XXX-XXX' )

使用第一个正则会精准匹配到:

  • 'XX-XX'中的-
  • 'XX-XX'中的-
  • 'XXX-XXX-XXX'中的两个-
    而TABLE-FIELD里的-会被自动忽略,完全符合需求。

对你现有正则的修正

你当前的(')()[^ ]*匹配逻辑存在偏差,它会匹配单引号开头的非空格内容,无法精准定位连字符,替换为上述环视正则即可实现目标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:36:07