正则表达式匹配撇号(')中的破折号(-)

Regex to match dashes(-) within apostrophe(')

提问人:Sudantha 提问时间:10/11/2023 更新时间:10/11/2023 访问量:58

问:

我正在尝试编写一个正则表达式来仅在撇号(')中匹配匹配破折号(-)

示例数据:

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

对匹配的期望 - 在 '' 和它应该忽略 - 在 '' 示例之外 , TABLE-FIELD

(不是 'XXXX' 和 'XXXX' 之间的表字段)和 ( TABLE-FIELD = 'XXXXXX' )----

到目前为止,想出这个,它将与里面的内容相匹配,但不确定要写什么表达式来限制它,仅限于 -(')()[^ ]*

结果

( 不是 TABLE-FIELD BEWEEN 和 )和 ( TABLE-FIELD ='XX-XX''XX-XX''XX-XX-XX' )

正则表达式替换

评论

1赞 InSync 10/11/2023
你用的是什么语言/工具/平台/框架/风格?最终目的是什么?
0赞 Sudantha 10/11/2023
POSIX 标准 1003.2
0赞 AdrianHHH 10/11/2023
POSIX版本可能会说出@InSync要求的部分内容,但前提是我们查找细节。所以:“你用的是什么语言/工具/平台/框架/风格?最终目的是什么?
0赞 Nahuel Fouilleul 10/11/2023
以下不适用于 BRE 和 ERE,但 PCRE,因为需要提前检查单引号的数量是否为偶数:反转条件会丢弃单引号外的文本[^']*(?=(('[^']*){2})*$)(*SKIP)(?!)|-
0赞 Sudantha 10/11/2023
@AdrianHHH,为什么语言/工具/平台/框架在这里很重要?,正则表达式不应该是标准中的通用内容吗?

答:

2赞 Cary Swoveland 10/11/2023 #1

如果可以假设总是有偶数个单引号,我们可以推断连字符位于单引号分隔的短语中,当且仅当字符串中连字符后面的单引号数为奇数时。如果匹配以下正则表达式,则会发生这种情况。

-(?=[^']*'(?:(?:[^']*'){2})*[^']*$)

演示

评论

0赞 Sudantha 10/11/2023
谢谢@cary-swoveland,这很好用,