2010-12-29 10 views
4

は、正規表現をしている時には良い言語であるが、私は文字で少し混乱しています私はhttp://regexlib.com/RETester.aspx上でコードをテストし、私はperlの正規表現のエスケープ文字は

//home/dev/abc/code/hello/world.cpp#1 
//home/dev/((.*?)/[^/]+).*# 

Match $1 $2 
//home/dev/abc/code/hello/world.cpp# abc/code abc 
たい結果を得ました

しかし、私はどのように私は、私が試したコード

をperlのためにこれを翻訳しない、非常にわからない、

\/\/home\/dev\/\(\(\.\*\?\)\/\[\^\/\]\+\)\.\*\# 

\/\/home\/dev\/((.*?)\/[^\/]+).*\# 

との両方が

を失敗したあなたはエスケープは正規表現は非常に読み取り不能になると思いませんか?私は何か間違って使っていますか?

+0

quotemetaはあなたの友人です。 –

答えて

5

/をエスケープする必要がないように、/の代わりに!を選択して正規表現を囲むことができます。

m!//home/dev/((.*?)/[^/]+).*#! 

が有効です。 http://ideone.com/TDrBG

+0

これに加えて、使用できるのは '!'だけではないということです。あなたはあなたが望むほぼすべてのキャラクターを使用することができます。 2つまたは3つの「m」または「s」のいずれかを持っている限り、まったく同じです。 – thecoshman

8

perlを使用している場合は、マッチする演算子に "m"、置換演算子に "s"の区切り文字を前置すると、正規表現の区切り文字として/を使用する必要はありません。 (たとえば、#または!、または平衡のかっこ/括弧:s[this][that])を使用すると、/をエスケープする必要はありません。 quotemeta関数または\Q ... \E regex escape sequencesを使用して、自動的にメタキャラクタをエスケープすることもできます。

+0

空白文字の前に英数字を使用することもできます: 'print" m "=〜m ama;'。しかし、使用しないでください?あなたが代替行動を起こさせたくない場合は、 – ysth

関連する問題