我试图在目录中的所有文件中查找我的具体单词(使用已弃用的API的方法调用)的所有出现。我需要一个regexp来查找不包含更新调用的所有此类事件(新API)。你能帮帮我吗?
示例:
正则表达式应该找到所有包含'method'的文件,而不是'method({'。
谢谢。
答案 0 :(得分:2)
betelgeuse:tmp james$ echo " method(a,b,c) "> test1
betelgeuse:tmp james$ echo " method(a,b,c) " > test3
betelgeuse:tmp james$ echo " method({a:a, b:b, c:c})" > test2
betelgeuse:tmp james$ grep "method([^{]" test*
test1: method(a,b,c)
test3: method(a,b,c)
解释:[ ]
定义一个字符类 - 即,此位置的字符可以匹配类中的任何内容。
^
作为类的第一个字符是否定:它表示此类匹配任何字符,除了此类中定义的字符。
{
当然是我们关心的唯一一个在这种情况下不匹配的角色。
所以在某些字符串中,这将匹配任何字符method(
后跟任何字符的字符串,但 {
除外。
还有其他方法可以做到这一点:
betelgeuse:tmp james$ grep "method(\w" test*
test1: method(a,b,c)
test3: method(a,b,c)
在这种情况下, \w
(假设C语言环境)等同于[0-9A-Za-z]
。如果您想允许可选空格,可以尝试:
betelgeuse:tmp james$ grep "method([[:alnum:][:space:]]" test*
test1: method(a,b,c)
test3: method( a, b, c)
betelgeuse:tmp james$
(在大多数正则表达式实现中,使用grep语法,[:alnum:] is the same as
\ w ;
[:space:] refers to any whitespace character - this is represented as
\ s`
答案 1 :(得分:2)
我认为正确的方法是使用负向前瞻操作符?!
/method(?!\(\{)/
以上陈述“任何<{1}} <{1}}
它比建议的method
更符合您的要求,因为后者与字符串结尾不匹配(即({
)并且它不处理您的两个字符/method([^{]/
的组合要求很好。
答案 2 :(得分:1)
您可以使用character classes排除以下 {
,例如
/method\([^{]/