←
PDF 227 / 520 Exercises
→
English · PDF 227
Original PDF page 227
中文 · PDF 227

但如果 "." 能匹配任意字符,那如何匹配字符 "." 本身呢?你需要使用一个"转义"来告诉正则表达式你想精确匹配它,而不是使用其特殊行为。与字符串一样,正则表达式使用反斜杠 \ 来转义特殊行为。因此要匹配一个 .,你需要正则表达式 .。不幸的是,这会带来一个问题。我们用字符串来表示正则表达式,而 \ 在字符串中也被用作转义符号。所以要创建正则表达式 .,我们需要字符串 "\.":

# 要创建正则表达式,我们需要 \ dot <- "\." # 但表达式本身只包含一个: writeLines(dot) #> . # 这告诉 R 去查找一个明确的 . str_view(c("abc", "a.c", "bef"), "a\.c")

如果 \ 在正则表达式中被用作转义字符,那如何匹配字面上的 \ 呢?你需要对它进行转义,创建正则表达式 \.。要创建这个正则表达式,你需要使用一个字符串,而字符串也需要转义 \。这意味着要匹配一个字面上的 \,你需要写 "\\"——你需要四个反斜杠才能匹配一个!

x <- "a\b" writeLines(x) #> a\b str_view(x, "\\")

在本书中,我将把正则表达式写作 .,把表示该正则表达式的字符串写作 "\."。

练习

    1. 解释为什么下面这些字符串都不能匹配一个 \:""、"\"、"\ "。