反斜杠的可变长度回顾

Variable-length lookbehind for backslashes

看起来很简单的任务最终没有按预期工作...

我正在尝试匹配 $\w+\b,除非它前面有不均匀数量的反斜杠。

示例(只有 $result 应该在匹配中):

This $result should be matched

这个\$结果应该<strong>不</strong>匹配

This \$result should be matched

这个\\\$结果应该<strong>不</strong>匹配

等...

以下模式有效:

(?<!\)(\\)*$\w+\b

但是,即使是重复的反斜杠也包含在匹配中,这是不希望的,所以我试图纯粹通过可变长度的回顾来实现这一点,但到目前为止我尝试的任何东西似乎都不起作用。

这里有任何正则表达式专家可以提供帮助吗?

您可以使用以下模式:

(?<!(?:^|[^\])\(?:\\)*)$\w+\b

Demo.

后视分析;即,前面没有:

  • (?:^|[^\]) - string/line 的开头或反斜杠以外的任何字符。
  • \ - 然后,一个反斜杠字符。
  • (?:\\)* 然后,任意偶数个反斜杠字符(包括零个)。

看起来提问帮助我回答了我自己的问题。

我不想匹配的部分必须用 positive lookbehind 包裹起来。

<strong>(?<=</strong>(?<!\\)(\\\\)*<strong>)</strong>\ $\w+\b

如果 $result 位于行首,也适用。

谁有更优解法,拍!

此正则表达式在第三个捕获组中获取所需的文本: (^| )(\\)*($\w+\b)

解释:

(^| )          Either beginning of line or a space
(\\)*        An even number of backslash characters, including none
(              Start of capture group 3
    $\w+\b    The wanted text
)              End of capture group 3