正则表达式匹配,无论间距

时间:2012-12-19 18:05:57

标签: regex

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

我正在寻找类似的东西:

$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 个答案:

答案 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\(\);

包括*?不正当地使正则表达式。