私は最初にPERLを使用していて(reg-exの背景知識はありますが)、文字クラスを持つPerlスクリプトを見ています。
$alwayssep = "[\\?!()\";/\\|‘]";
これが何を意味するのかを説明できる人はいますか?以下を含むすべての文字を意味することがわかりますが、?, !, (,),",;,/,|,'
疑問符とパイプの前にバックスラッシュが2つある理由は理解できません。通常、私たちは逃げるためにバックスラッシュを使用します。 Perlとは違いますか?
答え1
正規表現を定義するために二重引用符補間を使用したため、コードがめちゃくちゃになりました。qr/.../
オペレーター代わりに使用する必要があります。コードクリーンアップの一部として補間ルールを特定するのではなく、正規表現をデバッグできます。
#!/usr/bin/env perl
use strict;
use warnings;
use re 'debugcolor';
my $blah = "[\\?!()\";/\\|‘]";
print "something\n" if "not important" =~ m/$blah/;
この実行では正規表現が表示され[\?!()%";/\|%x{e2}%x{80}%x{98}]
、奇妙なビットはこれが実際にスマート参照であることを%x
示します。一部のソフトウェアがこのコードを壊しました。‘
喜び!修正するには、使用するコードを書き換えてqr
から、次を使用して新しいコードを確認してくださいre
。
#!/usr/bin/env perl
use strict;
use warnings;
use re 'debugcolor';
my $blah = qr#[?!()";/|']#;
use Data::Dumper; warn Dumper $blah;
print "something\n" if "not important" =~ m/$blah/;
正規表現に含めるべきかどうかを決定し\
、なぜ2回リストされているのかを考えてみましょう。コードにはユニットテストとドキュメントが含まれています。そうですか?