プロが教える店舗&オフィスのセキュリティ対策術

正規表現で@を使う場合は\@とするべきか@とするべきか悩んでいます。
両方とも構文エラーが起きないのでその時点で?ですが
.は\.としないと正規表現ではドット文字を認識しないのはわかりますが、正規表現の@はどうすればよいのでしょうか?
Perl自体@も配列なので\@つけた方が・・・
よろしくお願いいたします。

$x = "test@example.com";
if ( $x =~ /[^a-zA-Z0-9\.\-\_@]/)
if ( $x =~ /[^a-zA-Z0-9\.\-\_\@]/)

A 回答 (1件)

> $x = "test@example.com";


>if ( $x =~ /[^a-zA-Z0-9\.\-\_@]/)
>if ( $x =~ /[^a-zA-Z0-9\.\-\_\@]/)

文字列中の @ をエスケープを忘れてはいけません。
これは正規表現のマッチとは関係ありません。
この例でもuse strict すれば警告が出るはずです。


use strict;
use warnings;

#my $x = "foo@example.com";
my $x = "foo\@example.com";

#my @z = qw(f o o);
print "match\n" if $x =~ /[@z]/;

実行時のエラーメッセージ:
Possible unintended interpolation of @z in string at interpol.pl line 8.
Global symbol "@z" requires explicit package name at interpol.pl line 8.
Execution of interpol.pl aborted due to compilation errors.


上のスクリプトの my @z の行を生かすと
マッチに成功するようになります ;-)
@のエスケープは正規表現パターン中でも
必要ですが、ブラケットの中にある
'.' や '_' のエスケープは不要です。
'-' は扱いが微妙なんですが、この例では必要ですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!