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