1

次のような単純な一致を試みています。

if ($variable ne '*') { print "Hello"; }

「*」文字と等しくないものすべてに一致させたい (引用符なし)

しかし、* の前にバックスラッシュを使用する必要があるかどうか、または他のソリューションで見られるスラッシュの正規表現表記を使用する必要があるかどうかはわかりません。ここでの最善の解決策は何ですか?

サンプルコードは次のとおりです。

if ($var ne '*') { print "it is not a star!"; }
else 
{ 
    $var = '*';
    print "made $var into a star!"
}

変数を * 文字に設定するのは正しいですか?

4

2 に答える 2

2

正規表現の一致を使用している場合にのみ「*」文字をエスケープする必要がありますが、直接比較(with ne)を使用しているため、コードは問題ありません。正規表現を使用している場合、次のように言います。

if ($variable !~ /^\*$/) { ... }

しかし、この場合、使用するne方がより明確で迅速だと思います。

完全を期すため\Qに、正規表現で使用して、が検出されるまですべてのメタ文字を引用することもできます\E。それで:

if ($variable !~ /^\Q***\E$/ { ... }

$variableが3つの「*」文字に等しくない場合はtrueと評価されます。しかし、繰り返しになりますが、次の方法を使用したほうがよいでしょう。

if ($variable ne '***') { ... }
于 2012-05-15T22:24:31.463 に答える
0

正規表現を探しているかどうかわからない。

if ($variable !~ /\*/) { print "Hello"; } 
于 2012-05-15T22:26:23.407 に答える