- 締切済み
正規表現で
以下のようなプログラムを作りました。$arrの中に、(や、[、\マーク等が入っていると、 /[/: unmatched [] in regexp at.. というメッセージが出てプログラムが止まってしまいます。マークの前に\を入れるとエラーにはならないのですが、\を付けずに済む方法はないのでしょうか。今は手作業で\を付けたり消したりしているのですが、単語の数が増えたらどうやって処理したらいいか…。というわけで、解る方、よろしくお願いします。 -------------------------------------------------------------------------- foreach $ch1 (@ch1) { foreach $arr (@arr) { if (/$arr/){ 処理1 }else{ 処理2 } } }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- akiko
- ベストアンサー率0% (0/0)
質問の内容を取り違えてたらゴメンナサイ。 これって、メタ文字をエスケープ出来たら良いんですよね? それだったら、if文の前にquotemetaを使うか、マッチさせる時に \Qと\Eで囲んでみれば、上手くいくのでは・・・。 quotemetaを使う例: $arr = quotemeta $arr; if( /$arr/ ) { … \Qと\Eを使う例: if( /\Q$arr\E/ ) { …
if (/$arr/){ の行の直前で $arr の中身を修正してやればいいだけだと思います。 修正すべきなのは英数字以外のキャラクタで、それらの前に \を追加すればいいのだから、 $arr =~ s/(\W)/\\$1/g; ってやつを追加してやればいいわけです。
補足
お礼が遅れまして、本当に申し訳有りません。 何度も答えていただきありがとうございます!おかげで解決いたしました。 ありがとうございました。
補足
お礼が遅れまして、申し訳有りません!おかげでエラーが出なくなりました。! こちらでまとめてお礼申し上げます。ありがとうございました!!