2

我正在尝试用更新的函数替换旧的函数调用。

我正在寻找这样的东西:

$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?

4

4 回答 4

3

你在寻找\s*,意义0 or more whitespace characters

于 2012-12-19T18:07:45.810 回答
2

您需要移动*字符类的外部,因此要匹配任意数量的空格或制表符,您可以在正则表达式中使用以下内容:

[ \t]*

您也可以使用\s*,但请注意,这也将匹配换行符,听起来您只对制表符和空格感兴趣。

于 2012-12-19T18:08:14.223 回答
1

我相信您的问题在于您的位置*而不是逃避$(并且)。这将产生更好的结果。

\$myvar[ \t]*=[ ]*myclass::getmyvar\(\);

此外,您可以使用\s而不是字符类对其进行更新以匹配任何空格。

\$myvar\s*=\s*myclass::getmyvar\(\);
于 2012-12-19T18:10:23.093 回答
0

应该是这样的。您不应该在 [] 大括号中包含 *,并转义 $ 和 () 大括号:

\$myvar[\s\t]*?=[\t\s]*?myclass::getmyvar\(\);

包括 *?使正则表达式变得不贪婪。

于 2012-12-19T18:08:45.497 回答