• ベストアンサー

バックスラッシュを含む文字変数のマッチング

"\section"という文字列を含む行を取り出したいと思い、 if(/\\section/) と書けば、普通に動作しました。 そこで$section = "\\section"と変数に代入して if(/${section}/)と書くとうまくマッチしないようなのですが、何がまずいのでしょうか? ご教示頂けますよう、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • t140
  • ベストアンサー率39% (59/150)
回答No.2

/\Q$section/ や index($_, $section) >= 0 でどうでしょうか?

sunasearch
質問者

お礼

回答ありがとうございます。 \Q...\Eでくくればよかったんですね。 無事に解決しました。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • mth-mmk
  • ベストアンサー率38% (35/90)
回答No.1

結論から言うと、 if(/$section/)の中は、if(/\section/)として評価しているようなので、 $section="\\\\section"; にしないと通らないようです。

sunasearch
質問者

お礼

回答ありがとうございます。 そうですね。 単純に、$sectionを表示させてみれば良かったんですね。 ということは、""ダブルクオーテーション内部では、バックスラッシュは制御文字扱いで、バックスラッシュ2つ\\で、1つになるということですか。 #基本なんだろうな。。。

sunasearch
質問者

補足

$section="\\\\section"; という記述をすると、$sectionはマッチングで使うという用途が限られた変数になってしまい、普通の文字列として扱えない不都合があると思うのですが、何か対処法はないものでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A