我在我的正则表达式体内发现了这些东西,但我不知道我可以用它们做什么。有人有例子以便我可以尝试理解它们是如何工作的吗?
(?!) - negative lookahead
(?=) - positive lookahead
(?<=) - positive lookbehind
(?<!) - negative lookbehind
(?>) - atomic group
示例
给定字符串 foobarbarfoo
:
bar(?=bar) finds the 1st bar ("bar" which has "bar" after it)
bar(?!bar) finds the 2nd bar ("bar" which does not have "bar" after it)
(?<=foo)bar finds the 1st bar ("bar" which has "foo" before it)
(?<!foo)bar finds the 2nd bar ("bar" which does not have "foo" before it)
您还可以将它们组合起来:
(?<=foo)bar(?=bar) finds the 1st bar ("bar" with "foo" before it and "bar" after it)
定义
积极向前看 (?=)
在表达式 B 后面查找表达式 A:
A(?=B)
向前看负面(?!)
查找表达式 B 不跟随的表达式 A:
A(?!B)
看背后积极(?<=)
在表达式 B 之前查找表达式 A:
(?<=B)A
看看负面的背后(?<!)
查找表达式 B 不位于前面的表达式 A:
(?<!B)A
原子团 (?>)
原子组退出组并丢弃组内第一个匹配模式之后的替代模式(回溯被禁用)。
-
(?>foo|foot)s
适用于foots
将匹配其第一个替代方案 foo
,然后失败为 s
不会立即跟随,并因回溯被禁用而停止
非原子组将允许回溯;如果后续匹配失败,它将回溯并使用替代模式,直到找到整个表达式的匹配或用尽所有可能性。
(foo|foot)s
适用于foots
将会:
- 匹配第一个替代方案
foo
,然后失败为 s
不立即跟随 foots
,并回溯到第二个选择;
- 匹配其第二个替代方案
foot
,然后成功为 s
紧接着foots
,然后停止。
一些资源
在线测试人员
我是一名优秀的程序员,十分优秀!