为什么这个积极的前瞻与粗体文字不匹配? (不是。而不是 - >)
[_a-z0-9]+(?=\.|->)[_a-z0-9]+
提示6 。 ai_flags = 0; // comment hints.ai_flags
提示6 。 ai_family = AF_UNSPEC;
int newsocket = socket(结果 - &gt; ai_family ,结果 - &gt; ai_socktype ,结果< / b> - &GT;的 ai_protocol 的);
答案 0 :(得分:5)
首先,你需要逃避.
(.
匹配'任何',你希望\.
匹配“。”)[很奇怪 - 有人编辑了问题来解决这个问题]
第二,向前看前瞻 - 它不会消耗任何东西。所以,即使你逃避.
,[_a-z0-9]+(?=\.|->)
只是消费“hints6”(然后,展望未来,确认 next 字符将会 ”。”)。之后,[_a-z0-9]+
无法匹配“。”。
我真的不明白你想要做什么。据我所知,[_a-z0-9]+(?:\.|->)[_a-z0-9]+
会做你想要的,没有任何前瞻((?:...)
是一个不与结果绑定的分组。)
一般来说,你不需要前瞻,因为你可以匹配。它主要用于你想要匹配一个组时,但是由于某些(奇怪的)原因需要事先检查一个特定的情况。
[edit:]如果您只想捕获这两个单词,请使用([_a-z0-9]+)(?:\.|->)([_a-z0-9]+)
(注意这将捕获两个组,每个单词一个)。
[edit2:]如果这是一个语法荧光笔,那么我认为你可以选择突出 字的东西。展示比解释更容易:
(?:[_a-z0-9]+(?=(?:\.|->)[_a-z0-9]+)|(?<=[_a-z0-9]+(?:\.|->))[_a-z0-9]+)
将突出显示“一个单词后跟.word”或“一个单词前面的单词。”,它会突出显示两个单词而不突出显示该单词。它们是两个独立的匹配,但语法高亮显示不关心(我假设)。