2011-09-21 9 views
0
私はWindows 7の私は、検索を実行し、交換するためにしようとしている上のActiveState Perlの5.12.4を使用してい

...たPerl:シンプルな検索と置換質問

print "selected dir: $selected_dir basedir: $baseTestDir\n"; 
$selected_dir =~ s/$baseTestDir//g; 

$selected_dir = "\home\selenium\projects\myco\AutomatedTests\MyCliUSA\Critical Path\Live\G Sedan"$baseTestDir = "\home\selenium\projects\myco\AutomatedTests\MyCliUSA"。ただし、検索および置換ステートメントの後では、$selected_dirは変更されません。検索を適切に実装してここに置き換えるにはどうすればよいですか?

+0

あなたはどのようにdirの名前を使用するつもりはありません。 Windowsの "シェル"を呼び出さずにPerlで使用する場合は、スラッシュの代わりにスラッシュを使用できます。例えば。/home/selenium/projects ... – tadmc

+0

二重引用符で囲まれた単一のバックスラッシュは、あなたが期待していないものを意味します。警告を有効にしてください!詳細については、http://stackoverflow.com/questions/6788117/how-can-i-convert-backward-slashes-to-forward-slashes-in-perlを参照してください。 – daxim

答えて

4

あなたが正規表現パターンに$baseTestDir内のテキストを変換しませんでした。これはquotemetaを使用することができます。

my $base_test_dir_pat = quotemeta($base_test_dir); 
$selected_dir =~ s/^$base_test_dir_pat//; 

\Q..\Eは、二重引用符で囲んだ文字列リテラルでもアクセスできます。

$selected_dir =~ s/^\Q$base_test_dir\E//; 

末尾の\Eを省略することができます。

$selected_dir =~ s/^\Q$base_test_dir//; 
-2

私はbaseTestDirでselected_dirを交換するには、次を記述します。

$selected_dir =~ s/$selected_dir/$baseTestDir/; 
+0

それは同じことをしません。 $ selected_dirから$ baseTestDirを削除したいと思います。 – Dave

-1

あなたは '\'をエスケープする必要があります。

は、交換前の

$baseTestDir =~ s/\\/\\\\/g;

を行います。

+2

'quotemeta'や'/Q /.../ 'はこれを行うもっとクリーンでより一般的な方法です。 –