Perlの質問です。


my $char = ’a-zA-Z0-9@#$&¥’*+-=?^_`{|}~’;
if(
($mailaddr =~ /([^$char])+/)||
・・・

として、特定の文字以外が含まれているかをチェックする正規表現で、特定の文字以外の「/(スラッシュ)」が含まれていてもチェックできないのですが、どうしてなのでしょうか。

正規表現の一般的な解説ページの紹介は必要ありません。

よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/02/07 16:48:20
  • 終了:--

回答(2件)

id:kimbara No.1

kimbara回答回数638ベストアンサー獲得回数132005/02/07 17:11:28

ポイント130pt

http://tech-web.net/perlmania/perlre2.html

perlre - Perl の正規表現

if 文の$charを?QとEでくくってみてはいかがでしょう。そうしないと、$charに含まれる正規表現のメタ文字を文字として認識してくれません。

id:tanytany

なるほど、これも試してみようと思います。

とりあえず、急ぎだったので

($mailaddr =~ /¥//)||

を追加して安易な方法を取ってしまいました。orz

2005/02/07 17:33:19

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 hawkplume 2 1 0 2005-02-07 17:31:57
  • id:tanytany
    あ、アホだ。。。

    すいません。自己レス、いや事故レスか。。。

    my $char = ’a-zA-Z0-9@#$&¥’*+-=?^_`{|}~’;
    の「+-=」の-がメタ文字になっててその間の文字コードが
    全部スルーされちゃってましたorz

    my $char = ’a-zA-Z0-9@#$&¥’*+¥-=.?^_`{|}~’;

    というのが意図した正規表現だったようです。海よりも深く反省。。。
  • id:kimbara
    Re:あ、アホだ。。。

    あっ、もうお気づきだと思いますが、回答に書いた文章が文字化けで不完全でした。
    ?Qと¥E(あるいは/Eと/Q)とお読みください。
    この技を使えば、$char内にメタ文字があっても気にしなくてよいので楽だし、ソースも読みやすいと思います。
  • id:kimbara
    Re(2):あ、アホだ。。。

    >?Qと¥E(あるいは/Eと/Q)とお読みください。

    あれ? また文字化けした。はてなのバグか? ?Qは¥Qです。
  • id:tanytany
    Re(3):あ、アホだ。。。

    >>?Qと¥E(あるいは/Eと/Q)とお読みください。
    >
    >あれ? また文字化けした。はてなのバグか? ?Qは¥Qです。

    えーとそうすると、a-zの-もクォートされちゃいませんか?
  • id:kimbara
    Re(4):あ、アホだ。。。

    >えーとそうすると、a-zの-もクォートされちゃいませんか?

    あっ、確かに。
    そうすると、
    my $symbols = ’@#$&¥’*+¥-=.?^`{|}~’;
    if ($mailaddr =~ /([^¥w¥Q$symbols¥E])+/)
    かな。それだったら、tanytanyさんの挙げた方法でもよいですね。
    私も勉強になりました。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません