0

在许多语言中,对转义序列的支持不同于字符串文字和正则表达式。例如,在 python 中,\s转义序列出现在正则表达式中,而不是字符串文字,而在 php 中,\f换页符转义序列出现在正则表达式中,而不是字符串文字。虽然我理解显而易见的(\s代表多个字符并会引入歧义),但有些例子并不那么清楚。最重要的是,这些背后的文档也经常被忽视。

例如,PHP 有一个专门用于 PCRE 转义序列的页面http://php.net/manual/en/regexp.reference.escape.php,但未能提供字符串文字中转义序列的官方排他列表。

由于我是编程新手,我担心我错过了这背后的一些关键信息/历史。我的担心有道理吗?这甚至是一个问题吗?其他人都知道我不知道的事情吗?

(图片相关)一个非官方的,甚至不知道它是否正确的 php 字符串文字转义序列列表。为什么语言不在正则表达式和字符串文字之间进行标准化?以及为什么我似乎无法在这两个截然不同的事物之间找到好的文档

4

1 回答 1

2

在字符串文字中发现的转义序列可以防止编程语言混淆。例如,在许多语言中,字符串文字表示为引号之间的字符,如下所示

my_string = 'x string'

但是,如果您的字符串包含引号字符,那么您需要一种方法来告诉编程语言这应该被解释为文字字符

my_string = 'x's string' # this will cause bugs
my_string = 'x\'s string' # lets the programing language know that the internal quote is literal and not the end of the string

我认为大多数编程语言都有相同的字符串文字转义序列集。

正则表达式是另一回事,您可以将它们视为自己独立的语言,以字符串文字形式编写。在正则表达式中,诸如句点 (.) 之类的某些字符具有特殊含义,必须对其进行转义以匹配其文字对应物。而其他字符,当以反斜杠开头时,允许这些字符具有特殊含义。

例如

regex_string = 'A.C'  # match an A, followed by any character, followed by C
regex_string = 'A\.C' # match an A, followed by a period, followed by C
regex_string = 'AsC'  # match an A, followed by s, followed by C
regex_string = 'A\sC'  # match an A, followed by a space character, followed by C

因为正则表达式是它们自己的迷你语言,所以正则表达式中的所有转义序列都可用于普通字符串文字是没有意义的。

于 2016-02-05T12:38:41.787 回答