2012-04-28 9 views
1

私はPerlスクリプトで、この正規表現に出くわした:たPerl:異常な正規表現

$parent_file =~ [email protected]^\Q$CurrentWorkDirForFile\E/@@ 

現在の作業ディレクトリは、CWDが移入されます。

誰でもこのエントリが何であるか説明できますか?

答えて

5

perlでは、(ほぼ)任意の文字を使って正規表現を区切ることができます。これはs/^\Q$CurrentWorkDirForFile\E///に相当します。 \Qおよび\Eは、特殊パターンメタキャラクタの解釈を無効/有効にします。たとえば、/\Q+\E/は、+がregexpsの特殊文字であっても、リテラルプラスにマッチします。

+3

スラッシュ '... \ E/@@'が表示されませんでした。これは、おそらく変更された区切り文字の理由です。正規表現は 's/^ \ Q $ CurrentWorkDirForFile \ E \ ///'で、やや傾いた爪楊枝症候群です。 – TLP

+5

ちょうど1つの追加点:正規表現が解析される前に補間が行われ、さらに重要なことに、 '\ Q .. \ E'が実行される前に補間が行われます。つまり、 '\ Q .. \ E'は補間を妨げず、補間された文字列に影響します。 – ikegami