• ベストアンサー

正規表現の中の変数の中の演算子

perlで正規表現を使おうとしています。 確認したい文字列は変数にしており その文字列には「?」が含まれています。 ------------------------ $str = "文字列" $exp = "test?aaa=bbb"; if ($str =~ /^sss.*${exp}$/){ #do something } ------------------------ これだと、ヒットしません。。 $expを"test\?aaa=bbb"にすることもできません。 正規表現にはこだわりません。 どうしたら、うまくマッチングできますかね。。 なにか案があれば教えてください。

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

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

if ($str =~ /^sss.*\Q${exp}\E$/){ のようにすると、\Q~\Eの間メタ文字が無効になります。

to_kyo
質問者

お礼

ありがとうございます! うまくいきました! ちょっと処理に時間がかかるようですが ままままぁ、問題なしです。 感謝です。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

$expにある文字列は正規表現のメタ文字も文字そのものとして検索したいということであれば、 $exp = quotemeta $exp; してからマッチングをすれば望みどおりの結果になると思います。

to_kyo
質問者

お礼

ありがとうございます! $exp は、マッチングのあとで文字列として そのまま出力したかったので quotemetaを使うと、ちょっと支障がありました。 が、quotemetaは知らなかったので勉強になりました。 感謝です。

関連するQ&A