查找与一个模式匹配的线,但包含另一种模式的线除外

Find lines matching a pattern except those containing another pattern

提问人:Pekka 提问时间:1/5/2017 最后编辑:Pekka 更新时间:2/12/2017 访问量:3444

问:

在 Visual Studio Code 的正则表达式语法中,是否可以找到某个字符串的所有匹配项,例如

&$

除非有另一种模式,例如同一行中的字符串function(

function functionname(&$variable, ...)

?

这对我不起作用:

(?!function).*\&\$ 

它只是产生所有结果,包括有和没有的行,就好像我在做一个简单的搜索。function&$

VSCode 的正则表达式帮助页面Visual Studio 的帮助页面似乎建议就是这样,但我似乎无法让它在 VS Code 的任何星座中工作,因此应用程序似乎使用不同的表示法。

其他几个符号也不起作用(我想来自不同的正则表达式风格),我已经在谷歌上搜索过了。

可视化工作室代码

评论

0赞 Eric 2/12/2017
该帮助页面不适用于 VS Code。它适用于完整的 VS。VS Code 似乎不使用 .NET 正则表达式。
0赞 Pekka 2/12/2017
确实@Eric!这就解释了为什么它不起作用。我会编辑。

答:

4赞 Matt Bierner 1/5/2017 #1

此正则表达式可能有效:

^(?!.*function\().*(\&\$)

在第一组中捕获:&$$1

对于输入:

a &$ b
a &$ function()
a &$ function()
function() &$ a
a function() &$ a

只有第一行的 将使用此正则表达式进行匹配。&$

正则表达式的工作原理是使用否定 lookahead 来确保该行不包含字符串 。然而,这种前瞻必须固定到行的开头,这就是为什么需要。此外,这将只匹配每行一个匹配项function(.*

enter image description here

评论

0赞 Pekka 1/5/2017
这看起来应该有效 - 但 VSCode 仍然捕获所有事件,包括开头的那些事件。开始认为这可能是一个错误function
0赞 Matt Bierner 1/5/2017
您能否提供您尝试匹配的文本示例。我在 mac 上的 VSCode 1.8.1 中测试了我的简单示例文本,它确实有效(添加了屏幕截图以显示此内容)
0赞 Pekka 1/5/2017
它不应该匹配的一个例子:在我在 MacOS 上的 VS Code 中,这得到了匹配。奇怪!function smarty_core_assign_smarty_interface($params, &$smarty)
0赞 Matt Bierner 1/5/2017
如果您不希望匹配,请从 中删除 .这应该可以解决问题,使该行不再匹配。完整的正则表达式为:\(function\(^(?!.*function).*(\&\$)
0赞 Pekka 1/5/2017
啊!是的!我从没想过要把负面的展望放在里面。这有效,非常感谢!.*