我正在尝试用更新的函数替换旧的函数调用。
我正在寻找类似的东西:
$myvar = myclass::getmyvar();
但是,由于代码格式化,标签/间距可能会有很大差异。如何匹配$myvar
和= myclass::getmyvar();
之间的任意数量的标签或空格?
我尝试过类似的变体:
$myvar[* \t]=[* ]myclass::getmyvar();
没有成功。
我想将其传递给以下声明:
grep -rl '$myvar[* \t]=[* ]myclass::getmyvar();' ./ | xargs sed -i 's/$myvar[* \t]=[* ]myclass::myvar();/$myvar = mynewclass::myvar();/g'
这是正确的语法,还是我应该使用egrep?
答案 0 :(得分:3)
您正在寻找\s*
,意思是0 or more whitespace characters
。
答案 1 :(得分:2)
您需要将*
移到字符类之外,以便匹配任意数量的空格或制表符,您可以在正则表达式中使用以下内容:
[ \t]*
您也可以使用\s*
,但请注意,这也会匹配换行符,听起来您只对标签和空格感兴趣。
答案 2 :(得分:1)
我认为您的问题在于*
的位置,而不是$
,(
和)
。这将产生更好的结果。
\$myvar[ \t]*=[ ]*myclass::getmyvar\(\);
此外,您可以使用\s
而不是字符类来更新它以匹配任何空格。
\$myvar\s*=\s*myclass::getmyvar\(\);
答案 3 :(得分:0)
应该是这样的。你不应该在[]大括号中包含*,并转义$和()大括号:
\$myvar[\s\t]*?=[\t\s]*?myclass::getmyvar\(\);
包括*?不正当地使正则表达式。