Perl 与 Java 和 Python 一样,\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 似乎都处理""
相同封装的特殊正则表达式字符。我查找了预定义字符类(Java),它简单地说:“如果您在字符串文字中使用转义构造,则必须在反斜杠前面加上另一个反斜杠才能编译字符串。”
为什么 Java 和 Perl 对转义序列的处理不同于特殊的正则表达式字符(当它们都被 封装时""
),而 python 却没有?
就像为什么设计者选择转义序列,比如\n
or \t
,需要一个反斜杠,而对于预定义的字符类,比如\s
,需要两个(在 中""
)?
这是其他原因的结果吗?或者它是否以某种方式简化了某种交互或者你有什么?
我会假设这不是任意的。Python 只需要\
任何一种方式,但 Perl 和 Java\\
在处理""
. 除了有点混乱之外,它只是混乱。所以,我认为这个决定是有充分理由的。有谁知道为什么?