我需要一个正则表达式,它将匹配不包含两个连续短划线的字母串。
我接近这个使用环视的正则表达式(我看不到其他选择):
([-a-z](?<!--))+
以下作为输入:
qsdsdqf - sqdfqsdfazer - azerzaer-azerzear
制作三场比赛:
qsdsdqf-
sqdfqsdfazer-
azerzaer-azerzear
但我想要的是:
qsdsdqf-
-sqdfqsdfazer-
-azerzaer-azerzear
所以我的正则表达式失去了我不想要的第一个破折号。
谁可以给我一个可以做到这一点的提示或正则表达式?
答案 0 :(得分:5)
这应该有效:
-?([^-]-?)*
确保每两个短划线之间至少有一个非短划线字符。
答案 1 :(得分:0)
在我看来,做想要匹配包含双连字符的字符串,但是您希望将它们分解为不包含双连字符的子字符串。你有没有考虑在成对的连字符之间拆分?换句话说,拆分:
(?<=-)(?=-)
至于你的正则表达式,我认为这就是你所得到的:
(?:[^-]+|-(?<!--)|\G-)+
-(?<!--)
将匹配一个连字符,但如果下一个字符也是连字符,则匹配结束。下次,\G-
选择第二个连字符,因为它是下一个字符;可能发生的唯一方法(除了在字符串的开头)是前一个匹配在那时断开。
请注意,此正则表达式比大多数情况更依赖于风味;我用Java测试过,但并非所有版本都支持\G
和lookbehinds。