0

複数のフォルダーに保存されている複数のphpファイル間でコードをリファクタリングする必要があります。

次のようなコードインスタンスを置き換える必要があります。

 trim(ucfirst($userinfo['first_name'])).' '.trim(ucfirst($userinfo['last_name']))

テキストを使用して(これらのファイル内に)次のようになります。

 formatUserName($userinfo['first_name'],$userinfo['last_name'])

$変数名は異なりますが、それ以外はすべて同じであることに注意してください*。

私はWindowsマシンを使用していますが、phpとperlがインストールされています-sedの代わりにそれを使用したいと思います。

私はNotepad++を持っていますが、それがそのような検索および置換操作を処理できるかどうかはわかりません。

*コードにはこの行のバリエーションがあります。適切な正規表現を作成する方法を理解したら、自分で試してみます。

4

5 に答える 5

1

Notepad++ バージョン 6.0 では、次のことができます。

何を見つける:trim\(ucfirst\((\$\w+\['first_name'\])\)\)\.' '\.trim\(ucfirst\((\$\w+\['last_name'\])\)\)

と置換する: formatUserName\(\1,\2\)

于 2012-04-20T13:01:18.280 に答える
0

おそらく最良の方法は、File::Findモジュールを使用してデータを入力し、ループ@ARGV内で単純に置換を行うことです。while (<>)

このプログラムはアイデアを示していますが、正規表現をテストしていないので注意してください。ファイルのバックアップコピーはとして保存され*.php.bakます。

use strict;
use warnings;

use File::Find;

our @ARGV = ();

find sub {
  push @ARGV, $File::Find::name if /\.php$/;
}, 'C:\path\to\tree\root';

$^I = '.bak';

while (<>) {
  s<\Qtrim(ucfirst(\E\$(\w+)\Q['first_name'])).' '.trim(ucfirst(\E\$\1\Q['last_name']))\E>
   <formatUserName(\$$1['first_name'],\$$1['last_name'])>g;
  print;
}
于 2012-04-20T13:36:36.960 に答える
0

あなたの質問は、メタ文字の扱い方についてだと思います。これを行う1つの方法を次に示します。

my $find    = q|trim(ucfirst($userinfo['first_name'])).' '.trim(ucfirst($userinfo['last_name']))|;
my $replace = q|formatUserName($userinfo['first_name'],$userinfo['last_name'])|;

while (<>) {
    s/\Q$find\E/$replace/g;
}

\Q ... \E変数はまだ補間されますが、正規表現はその中にあるものと文字通り一致します。

于 2012-04-20T12:59:04.550 に答える
0

脚本:

$_ = 'trim(ucfirst($userinfo[\'first_name\'])).\' \'.trim(ucfirst($userinfo[\'last_name\']))';
s/^trim\(ucfirst\((\$[^\)]+)\)\)\.'\s+'\.trim\(ucfirst\((\$[^\)]+)\)\)$/formatUserName($1,$2)/; 
print $_;

出力:

formatUserName($userinfo['first_name'],$userinfo['last_name'])

リンクのテスト: http://ideone.com/4e0Bf

于 2012-04-20T13:08:42.530 に答える
0

未テスト (Windows シェルは利用できません):

perl -i.bak -lpe"BEGIN { $varname = qr/\$[a-z]+/; } s/trim\(ucfirst\(($varname)\['first_name'\]\)\)\.' '\.trim\(ucfirst\(\1\[\'last_name'\]\)\)/formatUserName($1['first_name'],$1['last_name'])/;" file1.php file2.php file3.php …

\1match 部分の backref と$1subst 部分のキャプチャ バッファに注意してください。

于 2012-04-20T13:03:02.797 に答える