如何编写正则表达式匹配单引号(')内的连字符(-)
匹配单引号内连字符的正则解决方案
要实现仅匹配单引号(')内的连字符(-),可以通过正则环视规则限定匹配范围,确保连字符处于一对未嵌套的单引号内部。
适配多数正则引擎(如PHP、Ruby等PCRE环境)的正则表达式
-(?=(?:[^']*'[^']*')*[^']*')
规则解释
-:直接匹配目标连字符(?=...):正向预查,确保当前位置后的内容满足以下条件:(?:[^']*'[^']*')*:匹配任意数量的“非单引号字符+单引号+非单引号字符+单引号”组合(即成对闭合的单引号)[^']*':匹配最后一组未闭合的单引号,以此确认当前连字符处于一对有效的单引号内部
兼容JavaScript等受限引擎的方案
如果你的正则引擎不支持复杂预查,可分两步处理:
- 先匹配所有单引号内的完整内容:
'[^']+' - 对每个匹配结果(去除首尾单引号),单独提取其中的
-即可。
示例验证
针对测试数据:
( 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
相关产品推荐
相关产品推荐

