- 已编辑
问题来自于《R for Data Science》电子书里14.3.1节(基础匹配,https://r4ds.had.co.nz/strings.html#basic-matches)里的一句话:
If \ is used as an escape character in regular expressions, how do you match a literal \? Well you need to escape it, creating the regular expression \\. To create that regular expression, you need to use a string, which also needs to escape \. That means to match a literal \ you need to write "\\\\" — you need four backslashes to match one!
我看到四个反斜杠的时候有点晕……这和我想的不一样呀。我觉得应该是三个反斜杠。
我是这么(错误地)理解的:如果有内容为\\\
这么一个字符串,那么第一个反斜杠会被R当作字符串的转义字符。
于是消除第一个反斜杠以后,得到一个内容为\\
的字符串。
第二个反斜杠会被R(或者说,stringr包)当作正则表达式的转义字符。
于是消除第二个反斜杠以后,得到一个内容为\
的正则表达式。这正是我想匹配的内容。
我上面这个说法错在哪里呢?烦请各位大神指点。
我之前看过 <https://stackoverflow.com/questions/18875852/why-string-replaceall-in-java-requires-4-slashes-in-regex-to-actually-r>,但是觉得很晕啊。