Regex 雷格斯:什么意思?

Regex 雷格斯:什么意思?,regex,negative-lookahead,Regex,Negative Lookahead,下面的正则表达式在子字符串FTW和ODP之间查找文本 /FTW(((?!FTW|ODP).)+)ODP+/ (?!…)的作用是什么?它的意思是“后面没有…”。从技术上讲,这就是所谓的a,您可以在不捕获字符串的情况下查看字符串中的前面内容。这是一个零宽度断言类,意味着此类表达式不会捕获表达式的任何部分。来自: 一个零宽度负前瞻断言。例如,/foo(?!bar)/匹配任何出现的“foo”后面没有“bar”的项。但是请注意,向前看和向后看不是一回事。您不能将此用于“向后看” 如果您要查找的“bar”

下面的正则表达式在子字符串FTW和ODP之间查找文本

/FTW(((?!FTW|ODP).)+)ODP+/
(?!
的作用是什么?

它的意思是“后面没有…”。从技术上讲,这就是所谓的a,您可以在不捕获字符串的情况下查看字符串中的前面内容。这是一个零宽度断言类,意味着此类表达式不会捕获表达式的任何部分。

来自:

一个零宽度负前瞻断言。例如,
/foo(?!bar)/
匹配任何出现的“
foo
”后面没有“
bar
”的项。但是请注意,向前看和向后看不是一回事。您不能将此用于“向后看”

如果您要查找的“bar”前面没有“
foo
”,
/(?!foo)bar/
将不会执行您想要的操作。这是因为
(?!foo)
只是说下一个东西不能是“
foo
”——它不是,它是一个“条”,所以“
foobar
”将匹配。为此,您必须执行类似于
/(?!foo)…bar/
的操作。我们之所以说“喜欢”,是因为您的“
bar
”前面没有三个字符。您可以通过以下方式进行介绍:
/(?:(?!foo).| ^.{0,2})bar/
。有时候,仅仅说:

“?!”实际上是“(?!…)”的一部分,这意味着里面的任何东西都不能在该位置匹配。

(?!regex)
是一个。它将测试当前光标位置的字符并向前,测试它们是否与提供的正则表达式不匹配,然后将光标返回到起始位置

整个regexp:

/
 FTW           # Match Characters 'FTW'
 (             # Start Match Group 1
  (             # Start Match Group 2
   (?!FTW|ODP)   # Ensure next characters are NOT 'FTW' or 'ODP', without matching
   .             # Match one character
  )+            # End Match Group 2, Match One or More times
 )             # End Match Group 1
 OD            # Match characters 'OD'
 P+            # Match 'P' One or More times
/

所以-搜索
FTW
,然后在搜索
ODP+
时捕获以结束字符串。还要确保
FTW
ODP+
之间的数据不包含
FTW
ODP
程序员一定是打字太快了。图案中的某些字符被翻转。更正:

/WTF(((?!WTF|ODP).)+)ODP+/
正则表达式

匹配第一个FTW,紧跟其后的不是FTW,也不是ODP,然后是第一个ODP之前的所有后续字符(但如果其中有FTW,则不会匹配),然后是后面的所有字母p

因此,在字符串中:

FTWFTwoDPFTWJFTWJJJJJODPPJJODPPJJJ

它将与粗体部分相匹配


FTWFTwoDPFTWJFTWJJJJJJODPPPPJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ如果你知道该用什么搜索词的话。不管怎样,你不是想链接到这个片段吗?在这种情况下,我认为谷歌很容易知道regex文档。是的,感谢链接更正。Haters:来吧,放轻松一点。这是一个对一些鄙视regex的人开的字谜玩笑。尽管没有“帮助”,让我们不要在这里太闷了。开玩笑的回答很容易引起反对票,即使它们是有用的;这就是这里的情况。需要一点习惯,但我认为它是值得的,就整体网站质量而言。这是特定于perl的(和pcre),不是吗?@tylerl:它适用于任何支持前瞻性的风格:Perl、Python、PHP、.NET、Java、JavaScript、JGSoft等。您的逻辑中有一个微小的错误,因为前瞻性断言位于
+
'ed match组中,它匹配FTW…ODP之间的任何文本,其中既不包含FTW也不包含ODP。@gnarf是正确的:gree不管是不是dy,这个正则表达式将永远不会匹配多个出现的“FTW”或“ODP”。你是对的,我的错误。我正在修复这个,以避免未来的观众混淆。+1用于正确解释它是如何在提供的正则表达式中使用的。
/WTF(((?!WTF|ODP).)+)ODP+/
/FTW(((?!FTW|ODP).)+)ODP+/