匹配不包含连续破折号的字符串部分

时间:2010-08-09 21:59:46

标签: regex

我需要一个正则表达式,它将匹配不包含两个连续短划线的字母串。

我接近这个使用环视的正则表达式(我看不到其他选择):

([-a-z](?<!--))+

以下作为输入:

  

qsdsdqf - sqdfqsdfazer - azerzaer-azerzear

制作三场比赛:

  

qsdsdqf-
  sqdfqsdfazer-
  azerzaer-azerzear

但我想要的是:

  

qsdsdqf-
  -sqdfqsdfazer-
  -azerzaer-azerzear

所以我的正则表达式失去了我不想要的第一个破折号。

谁可以给我一个可以做到这一点的提示或正则表达式?

2 个答案:

答案 0 :(得分:5)

这应该有效:

-?([^-]-?)*

确保每两个短划线之间至少有一个非短划线字符。

答案 1 :(得分:0)

在我看来,想要匹配包含双连字符的字符串,但是您希望将它们分解为不包含双连字符的子字符串。你有没有考虑在成对的连字符之间拆分?换句话说,拆分:

(?<=-)(?=-)

至于你的正则表达式,我认为这就是你所得到的:

(?:[^-]+|-(?<!--)|\G-)+

-(?<!--)将匹配一个连字符,但如果下一个字符也是连字符,则匹配结束。下次,\G-选择第二个连字符,因为它是下一个字符;可能发生的唯一方法(除了在字符串的开头)是前一个匹配在那时断开。

请注意,此正则表达式比大多数情况更依赖于风味;我用Java测试过,但并非所有版本都支持\G和lookbehinds。