- ベストアンサー
正規表現の中の変数の中の演算子
perlで正規表現を使おうとしています。 確認したい文字列は変数にしており その文字列には「?」が含まれています。 ------------------------ $str = "文字列" $exp = "test?aaa=bbb"; if ($str =~ /^sss.*${exp}$/){ #do something } ------------------------ これだと、ヒットしません。。 $expを"test\?aaa=bbb"にすることもできません。 正規表現にはこだわりません。 どうしたら、うまくマッチングできますかね。。 なにか案があれば教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
if ($str =~ /^sss.*\Q${exp}\E$/){ のようにすると、\Q~\Eの間メタ文字が無効になります。
その他の回答 (1)
- sakusaker7
- ベストアンサー率62% (800/1280)
回答No.1
$expにある文字列は正規表現のメタ文字も文字そのものとして検索したいということであれば、 $exp = quotemeta $exp; してからマッチングをすれば望みどおりの結果になると思います。
質問者
お礼
ありがとうございます! $exp は、マッチングのあとで文字列として そのまま出力したかったので quotemetaを使うと、ちょっと支障がありました。 が、quotemetaは知らなかったので勉強になりました。 感謝です。
お礼
ありがとうございます! うまくいきました! ちょっと処理に時間がかかるようですが ままままぁ、問題なしです。 感謝です。