分享
三行代码  ›  专栏  ›  技术社区  ›  aaaa

带条件-非期望输出的正则表达式

  •  1
  • aaaa  · 技术社区  · 1 周前

    % 我想用一个特殊的正则表达式,否则我想用另一个。

    我尝试了以下方法: https://regex101.com/r/UvFZpo/1/

    (%)(?(1)[^$]+|[^%]+) .

    abc%

    但我没有得到预期的结果。

    我本想看看 匹配,因为它包含 % 如果绳子是, abc$

    我哪里出错了?

    1 回复  |  直到 1 周前
        1
  •  0
  •   Wiktor Stribiżew    1 周前

    Regex从左到右逐位置解析字符串。

    一旦你的模式匹配 & ,它的索引位于字符串的末尾,因此,它失败,因为没有更多的字符可与后续的字符匹配 [^$]+ 图案。

    你可以在这里使用一个简单的替代:

    ^(?:([^$]*%[^$]*)|([^%]+))$
    

    regex demo

    % ,将填充组1,否则将填充组2。

    细节

    • ^ -字符串开头
    • (?:([^$]*%[^$]*)|([^%]+))
      • ([^$]*%[^$]*) -组1:除 $ ,尽可能多, %
      • | -或者
      • ([^%]+) -任何1+字符,除了 %
    • $ -结束字符串。