• 締切済み

正規表現に関する質問

NAMAZUの設定をしていて、設定のサンプルに以下のような正規表現があり分からなかったので質問させて下さい。 ".*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*" \\となっているところエスケープならが\が一つでいいのでは? と疑問に思いました。自分の間違いと思いますが教えてください。

みんなの回答

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

例えば、引用符を含む文字列は、 "\"" と書きます。通常なら文字列の終端を表す " ですが、直前に \ を書くことで終端の意味を打ち消して文字列中の普通の文字という意味を表します。また、例に出ている "\x23" というのも文字コードが16進で23の文字(#)を表します。 このように、文字列中で \ は特別な意味を持つため、\ という文字自身を表したい時は "\\" か、文字コードを使って "\x5C" と書く必要があります。 つまり、「正規表現としては \ だが、正規表現を文字列で表記する場合は、\ は言語によっていろいろな表現の仕方がある」です。

noname#24489
質問者

お礼

ありがとうございます。 今回は拡張子の.を表すには\.ではなく\\.が正解という ことでしょうか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

エスケープ記号は、それ自体が特殊な意味があるために、自身を表すために\\ のようにする必要があります。

回答No.1

二重に正規表現が評価されるために、二重に\\のように エスケープをすることがあります。 これはnamazuに限らず、シェルスクリプトにも起こりえることです。 #bash上でsedを使う等・・・

noname#24489
質問者

お礼

ありがとうございます。 この場合拡張子の.を表すのに\\がいるということでしょうか? \\だと\自身という気がして\.が正解のような気がするのですが。

関連するQ&A