-PR-
締切り
済み

正規表現で

  • 暇なときにでも
  • 質問No.3667
  • 閲覧数40
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 29% (20/68)

以下のようなプログラムを作りました。$arrの中に、(や、[、\マーク等が入っていると、
/[/: unmatched [] in regexp at..
というメッセージが出てプログラムが止まってしまいます。マークの前に\を入れるとエラーにはならないのですが、\を付けずに済む方法はないのでしょうか。今は手作業で\を付けたり消したりしているのですが、単語の数が増えたらどうやって処理したらいいか…。というわけで、解る方、よろしくお願いします。

--------------------------------------------------------------------------
foreach $ch1 (@ch1) {
foreach $arr (@arr) {
if (/$arr/){
処理1
}else{
処理2
}
}
}
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全2件)

  • 回答No.1

if (/$arr/){ の行の直前で $arr の中身を修正してやればいいだけだと思います。 修正すべきなのは英数字以外のキャラクタで、それらの前に \を追加すればいいのだから、 $arr =~ s/(\W)/\\$1/g; ってやつを追加してやればいいわけです。 ...続きを読む
if (/$arr/){
の行の直前で $arr の中身を修正してやればいいだけだと思います。
修正すべきなのは英数字以外のキャラクタで、それらの前に
\を追加すればいいのだから、

$arr =~ s/(\W)/\\$1/g;

ってやつを追加してやればいいわけです。
補足コメント
ryogoku

お礼率 29% (20/68)

お礼が遅れまして、本当に申し訳有りません。
何度も答えていただきありがとうございます!おかげで解決いたしました。
ありがとうございました。
投稿日時 - 0000-00-00 00:00:00
  • 回答No.2
レベル2

ベストアンサー率 0% (0/0)

質問の内容を取り違えてたらゴメンナサイ。 これって、メタ文字をエスケープ出来たら良いんですよね? それだったら、if文の前にquotemetaを使うか、マッチさせる時に \Qと\Eで囲んでみれば、上手くいくのでは・・・。 quotemetaを使う例: $arr = quotemeta $arr; if( /$arr/ ) { … \Qと\Eを使う例: if( /\Q$arr\E ...続きを読む
質問の内容を取り違えてたらゴメンナサイ。
これって、メタ文字をエスケープ出来たら良いんですよね?
それだったら、if文の前にquotemetaを使うか、マッチさせる時に
\Qと\Eで囲んでみれば、上手くいくのでは・・・。

quotemetaを使う例:
$arr = quotemeta $arr;
if( /$arr/ ) {


\Qと\Eを使う例:
if( /\Q$arr\E/ ) {


補足コメント
ryogoku

お礼率 29% (20/68)

お礼が遅れまして、申し訳有りません!おかげでエラーが出なくなりました。!
こちらでまとめてお礼申し上げます。ありがとうございました!!
投稿日時 - 0000-00-00 00:00:00
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ