反斜杠的可变长度回顾
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
看起来很简单的任务最终没有按预期工作...
我正在尝试匹配 $\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