提问人:Pekka 提问时间:1/5/2017 最后编辑:Pekka 更新时间:2/12/2017 访问量:3444
查找与一个模式匹配的线,但包含另一种模式的线除外
Find lines matching a pattern except those containing another pattern
问:
在 Visual Studio Code 的正则表达式语法中,是否可以找到某个字符串的所有匹配项,例如
&$
除非有另一种模式,例如同一行中的字符串function(
function functionname(&$variable, ...)
?
这对我不起作用:
(?!function).*\&\$
它只是产生所有结果,包括有和没有的行,就好像我在做一个简单的搜索。function
&$
VSCode 的正则表达式帮助页面Visual Studio 的帮助页面似乎建议就是这样,但我似乎无法让它在 VS Code 的任何星座中工作,因此应用程序似乎使用不同的表示法。
其他几个符号也不起作用(我想来自不同的正则表达式风格),我已经在谷歌上搜索过了。
答:
4赞
Matt Bierner
1/5/2017
#1
此正则表达式可能有效:
^(?!.*function\().*(\&\$)
在第一组中捕获:&$
$1
对于输入:
a &$ b
a &$ function()
a &$ function()
function() &$ a
a function() &$ a
只有第一行的 将使用此正则表达式进行匹配。&$
正则表达式的工作原理是使用否定 lookahead 来确保该行不包含字符串 。然而,这种前瞻必须固定到行的开头,这就是为什么需要。此外,这将只匹配每行一个匹配项function(
.*
评论
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
啊!是的!我从没想过要把负面的展望放在里面。这有效,非常感谢!.*
评论