- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:パイプ以外をエスケープしてマッチ判定させる方法)
パイプ以外をエスケープしてマッチ判定させる方法
このQ&Aのポイント
- |(パイプ)以外をエスケープしてマッチしているか判定をさせたいのですが、スマートな方法をご教授して頂けないでしょうか?
- 「?」「*」「+」「|」以外でも\Qでエスケープされない文字ってあるのでしょうか?
- Perlのコードを使用して、指定した文字以外をエスケープしてマッチ判定させる方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> |(パイプ)以外をエスケープしてマッチしているか判定をさせたい 正規表現用のエスケープ関数 quotemeta を使ってエスケープした後、| だけアンエスケープした文字列を使えばよいでしょう。 $d = quotemeta($b); $d =~ s/\\\|/|/g; if ($a =~ /$d/i) { $match_j = "ok" } または | 区切りで分割し、それぞれの文字列をエスケープした後、| で連結するというのもありです。 $d = join '|', map quotemeta, split /\|/, $b; if ($a =~ /$d/i) { $match_j = "ok" } ※共に $a は加工する必要がないので、$c は不要です。 > 「?」「*」「+」「|」以外でも\Qでエスケープされない文字ってあるのでしょうか? 「されない」ではなく「される」文字では?それらの文字は全てエスケープされますよ? \Q や quotemeta でエスケープされないのは、\w にマッチする文字だけです。その他(\W にマッチする文字)は全てエスケープされます。
お礼
leaz024さん、回答ありがとうございました。 $d = quotemeta($b); $d =~ s/\\\|/|/g; if ($a =~ /$d/i) { $match_j = "ok" } まさに私のやりたかったことです。 助かりました。 ありがとうございます。