Java や Python と同様に、Perl には\s
、他の特殊文字に加えて、空白に一致する特殊な正規表現文字 があります。
Perl では、以下は有効ではありません。
my $sentence = "The End";
my $subStr = "\s"; #Does NOT work, needs to be "\\s" or '\s'
if ($sentence =~ /$subStr/)
{
say "True";
}
Java では、これは有効です。
String s = "The End";
if (s.matches(".*\\s.*")) //same deal as with Perl ("\\s")
{
System.out.println("True");
}
Python では、 または のいずれ"\s"
かを使用できます'\s'
。
Java と Perl はどちらも、カプセル化され""
た特殊な正規表現文字を同じように扱っているようです。Predefined Character Classes (Java)を調べたところ、 「文字列リテラル内でエスケープされた構造を使用している場合は、文字列をコンパイルするためにバックスラッシュの前に別のバックスラッシュを付ける必要があります」と書かれていました。
Java と Perl の両方が特別な正規表現文字とは異なる方法でエスケープ シーケンスを処理するのはなぜ""
ですか?
\n
なぜ設計者は、またはのようなエスケープ シーケンスで\t
は 1 つのバックスラッシュを必要とするのに、 のような定義済みの文字クラスで\s
は 2 つ (while in ""
) を必要とする選択をしたのでしょうか?
これは何か別の結果ですか?それとも、何らかの方法で何らかの相互作用を簡素化しますか、それとも何を持っていますか?
恣意的ではなかったと仮定します。Python は\
いずれかの方法しか必要としませんが、Perl と Java\\
は""
. 少し混乱するだけでなく、面倒です。ですから、この決定には正当な理由があると思います。理由を知っている人はいますか?