代码之家  ›  专栏  ›  技术社区  ›  buckley

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

  •  3
  • buckley  · 技术社区  · 14 年前

    我很接近这个使用lookaround的正则表达式(我看没有其他选择):

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

    输入如下:

    qsdsdqf—sqdfqsdfazer—阿塞拜疆

    生成三个匹配项:

    qsdsdqf公司-

    亚泽尔亚泽尔

    但我想要的是:

    qsdsdqf公司-

    -亚泽尔亚泽尔

    谁能给我一个提示或者一个正则表达式来做这个?

    2 回复  |  直到 14 年前
        1
  •  5
  •   sth    14 年前

    -?([^-]-?)*
    

    它确保每两个破折号之间至少有一个非破折号字符。

        2
  •  0
  •   Alan Moore Chris Ballance    14 年前

    在我看来像你 要匹配包含双连字符的字符串,但要将其拆分为不包含双连字符的子字符串。你考虑过把它分成两对连字符吗?换句话说,拆分时间:

    (?<=-)(?=-)
    

    至于你的正则表达式,我想这就是你的意思:

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

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

    注意这个正则表达式比大多数正则表达式更依赖于味道;我用Java测试了它,但不是所有的风格都支持 \G 向后看。