2012-02-02 9 views
0

私は完全なファイルパスのリストを持っています。完全なファイルパスはすべて "/ dir1/dir2/dir3/s .."のようになります。私は完全にsを取り除きたい。ファイル名から。ファイル名が複数である可能性があります(例:s.asdfs.cpp)。私はsの2番目の出来事を取り除きたいとは思わない。これは実際のファイル名の一部であり、リスト内のすべてのフルファイルパスに再作成されたテーマではないためです。私はPHPで、次の実行した場合PHP Exec()Sedを使用すると奇妙な結果が得られます

/dir1/dir2/dir3/filenames.cpp 

:しかし、私はそれをしたいとシェルの作品に次のことを実行

echo /dir1/dir2/dir3/s.filenames.cpp | sed 's#\(.*\)\/s\.\([^\/]*\)#\1\/\2#g' 

は、所望の結果を提供します

$formatted_filename = exec("echo ".$filename." | sed 's#\(.*\)\/s\.\([^\/]*\)#\1\/\2#g'"); 

$filename = /dir1/dir2/dir3/s.filenames.cpp; 

そして、私のbashシェルの実行中

php -q script_name_that_contains_command_above.php > test.html 

と私は非常に奇妙な結果を得るtest.htmlというを表示する私のFirefoxブラウザをリフレッシュ。この編集されたファイルのパスがリストされるべき場所の代わりに私が

<strange box> 

が2行と右下のセルを除いて0からなる2列の小さなボックスがある

<strange box>/<strange box> 

を取得します。最初の発生は右下のセルに1があり、2番目の発生には右下のセルに2があります。

sedコマンドは機能しますが、phpまたはexecコマンドが誤って解釈しています。何か案は?

+0

は、なぜあなたは、PHPの正規表現を使用していませんか? –

+0

私はPHPをかなり使い慣れています。あなたはpreg_match関数を提案していますか? – halexh

+0

"奇妙なボックス"はおそらく "不明な文字"フォントグリフで、印刷できない文字です。おそらくヌル(ascii 0)です。 –

答えて

0

この特定の正規表現でのexecを使用するためのソリューションは、PHPの関数を使用していた、preg_replace()

preg_replace("/\/s/./", "/", $filename);