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 に答える