正则表达式在找到字符串时忽略匹配
Regex ignore match when found string
我写了这个正则表达式来匹配 .= or = or :=
之前的任何字符串
如果在同一行中存在单词 foo
,那么我如何添加它,然后它不匹配该行中的任何内容?
https://regex101.com/r/tJRoDh/213
(?!.*foo)\b(\w+)\s*(\.=|=|:=)
x = foo
foo x=
x = foo
foo text :=
text := x text foo
^ don't match any of these because exist the word foo on the same line
---------------------------------------------
text HELLO:= text text
^ match hello
text x = text
^ match x
text .= something else y:= color
^ match text ^ match y
我在 AutoHotkey 上使用正则表达式来匹配 .= = and :=
之前的所有字符串
以下正则表达式似乎就足够了:
^(?:(?!foo).)*\b(\w+)\s*(\.=|=|:=)(?:(?!foo).)*$
这在所需子字符串模式前后使用规范的 Regular expression to match a line that doesn't contain a word,从而拒绝在目标之前或之后带有子字符串 "foo"
的行。
AutoHotKey 参考 regex quick reference
处的 pcre 手册
在这种情况下,要获得多个匹配项,您可以使用 \G
锚点,它断言在第一个匹配项的字符串开头的前一个匹配项的末尾位置。
\G(?!.*\bfoo\b)[^.:=\r\n]*(?:[.:](?!=)[^.:=\r\n]*)*\b(\w+)\h*([.:]?=)
说明
\G
断言前一场比赛结束时的位置,或者在本例中为字符串的开头
(?!.*\bfoo\b)
否定前瞻,断言字符串不包含foo
[^.:=\r\n]*
匹配 0+ 次任何字符,除了 .
:
=
或换行符
(?:[.:](?!=)[^.:=\r\n]*)*
如果确实遇到了 .
或 :
只有当它后面没有直接跟着 =
时才匹配它,并重复此 0+ 次以防出现这种情况多次发生
\b(\w+)
单词边界,在第 1 组中捕获 1+ 个单词字符
\h*([.:]?=)
匹配 0+ 个水平空白字符并在组 2 中捕获 .=
:=
或 =
我写了这个正则表达式来匹配 .= or = or :=
如果在同一行中存在单词 foo
,那么我如何添加它,然后它不匹配该行中的任何内容?
https://regex101.com/r/tJRoDh/213
(?!.*foo)\b(\w+)\s*(\.=|=|:=)
x = foo
foo x=
x = foo
foo text :=
text := x text foo
^ don't match any of these because exist the word foo on the same line
---------------------------------------------
text HELLO:= text text
^ match hello
text x = text
^ match x
text .= something else y:= color
^ match text ^ match y
我在 AutoHotkey 上使用正则表达式来匹配 .= = and :=
以下正则表达式似乎就足够了:
^(?:(?!foo).)*\b(\w+)\s*(\.=|=|:=)(?:(?!foo).)*$
这在所需子字符串模式前后使用规范的 Regular expression to match a line that doesn't contain a word,从而拒绝在目标之前或之后带有子字符串 "foo"
的行。
AutoHotKey 参考 regex quick reference
处的 pcre 手册在这种情况下,要获得多个匹配项,您可以使用 \G
锚点,它断言在第一个匹配项的字符串开头的前一个匹配项的末尾位置。
\G(?!.*\bfoo\b)[^.:=\r\n]*(?:[.:](?!=)[^.:=\r\n]*)*\b(\w+)\h*([.:]?=)
说明
\G
断言前一场比赛结束时的位置,或者在本例中为字符串的开头(?!.*\bfoo\b)
否定前瞻,断言字符串不包含foo
[^.:=\r\n]*
匹配 0+ 次任何字符,除了.
:
=
或换行符(?:[.:](?!=)[^.:=\r\n]*)*
如果确实遇到了.
或:
只有当它后面没有直接跟着=
时才匹配它,并重复此 0+ 次以防出现这种情况多次发生\b(\w+)
单词边界,在第 1 组中捕获 1+ 个单词字符\h*([.:]?=)
匹配 0+ 个水平空白字符并在组 2 中捕获.=
:=
或=