【问题标题】:PCRE conditional statements not matching as expectedPCRE 条件语句与预期不匹配
【发布时间】:2026-01-16 08:50:01
【问题描述】:

here 描述的条件模式似乎不起作用

查看我当前的setup

我正在尝试匹配包含 test 和 pie 的任何行,有什么想法我做错了吗?

【问题讨论】:

  • 但是(?:(test)pie) 里面没有条件构造。 (?:(test)pie) = testpie。有什么问题?
  • @WiktorStribiżew 我正在尝试匹配包含 test 和 pie 的任何行
  • test.*pie|pie.*test^(?=.*test)(?=.*pie).*
  • @WiktorStribiżew 你的答案是正确的接近。

标签: regex pcre


【解决方案1】:

我的猜测是您可能正在尝试设计一些可能看起来像这样的表达式:

(?(exp)(?P<exp>)\btest\b|(?P<fruits>)\bpie\b)

Demo 1

(?(1)(\btest\b)|(\bpie\b))

Demo 2


表达式在右上角的面板上进行了解释 regex101.com,如果你愿意 探索/简化/修改它,在this link,你可以看到它是如何 如果你愿意,可以匹配一些样本输入。

【讨论】:

  • 最好用你自己的话来解释,否则,有人可能会认为你没有意义。例如,除非此序列 (?(exp)(?P&lt;exp&gt;)\btest\b|(?P&lt;fruits&gt;)\bpie\b) 在量化组内运行,否则 (?(exp)) 始终为 false,并且 yes 部分永远不会匹配。此外,尽管 PCRE 和 Perl 一样尊重 Python 的捕获组命名约定,但它不是 Perl 的语法。
  • (?(1)(\btest\b)|(\bpie\b)) 是我想要的,谢谢。没有条件有没有办法做到这一点?
  • @sp00kyb00g13 (?(1)(\btest\b)|(\bpie\b)) 是一个等于pie 的模式。为什么需要这么奇怪的模式?
  • @WiktorStribiżew 看了更多之后,这不是我想要的,它只是像你说的那样匹配馅饼。