正则表达式积极前瞻

Ric*_*los 1 regex perl posix regex-lookarounds

为什么这个积极的前瞻与粗体文本不匹配?(不是.而不是 - >)

[_a-z0-9]+(?=\.|->)[_a-z0-9]+
Run Code Online (Sandbox Code Playgroud)
提示6.ai_flags = 0; // comment hints.ai_flags
hints6.ai_family = AF_UNSPEC;
int newsocket = socket(结果 - > ai_family,结果 - > ai_socktype,结果 - > ai_protocol);

and*_*oke 5

首先,你需要逃避.(.匹配'任何',你想\.匹配".")[怪异 - 有人编辑问题来解决]

第二,前瞻向前看 - 它不会消耗任何东西.所以,即使你逃避了.,[_a-z0-9]+(?=\.|->)也只是消耗 "hints6"(然后,展望未来,确认下一个角色将是".").之后,[_a-z0-9]+无法匹配".".

我真的不明白你想要做什么.据我所知,[_a-z0-9]+(?:\.|->)[_a-z0-9]+你会做你想要的,没有任何前瞻((?:...)是一个不与结果绑定的分组).

一般来说,你不需要前瞻,因为你可以匹配.它主要用于你想要匹配一个组,但是由于一些(奇怪的)原因需要事先检查一个特定的情况.

[编辑:]如果你只想捕捉这两个单词然后使用([_a-z0-9]+)(?:\.|->)([_a-z0-9]+)(注意这将捕获两个组,每个单词一个).

[edit2:]如果这是一个语法荧光笔,那么我认为你可以选择突出显示任何一个单词的东西.展示比解释更容易:

(?:[_a-z0-9]+(?=(?:\.|->)[_a-z0-9]+)|(?<=[_a-z0-9]+(?:\.|->))[_a-z0-9]+)
Run Code Online (Sandbox Code Playgroud)

这将突出显示"一个单词后跟.word"或"一个单词前面的单词.",这将突出显示两个单词而不突出显示圆点.它们是两个单独的匹配,但语法高亮显示不关心(我假设).