我有一个可能以;. 我想匹配和替换这些;字符串。以下正则表达式有效,但如何使其更简单?
(?:^(; ).*)(?:.*(; )$)|(?:^(; ).*)|(?:.*(; )$)
Run Code Online (Sandbox Code Playgroud)
这使用结构 AB|A|B(A 和 B,或 A,或 B)。
示例字符串:
; foo ;bar; (2 场比赛)foo ;bar; (1 场); foo ;bar (1 场)foo ;bar (0 场比赛)请注意,非捕获组旨在对模式序列进行分组,如果您不量化该组,也不在内部使用替代方案,则非捕获组将变得多余。因此,您的正则表达式看起来就像没有这些组,并且您很容易看到第一个替代方案中^(; ).*.*(; )$|^(; ).*|.*(; )$有一个双精度。.*将模式简化为^(; ).*(; )$|^(; ).*|.*(; )$您可以看到,如果第一部分不匹配,则第二部分或第三部分将;在开头或结尾处找到后跟一个空格,因此第一个替代方案看起来多余(除非您需要将替换逻辑拆分为 3 个)案例!)。
因此,如果您只想用 1 个替换模式替换匹配项,您可以使用
^;\s*|;\s*$
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示