"[^\\']"
第二,转义的撇号。为什么需要避开撇号?
首先请注意,在 Emacs 正则表达式语法中,\`
匹配字符串的开头,并\'
匹配字符串的结尾。在多行字符串中,这与更熟悉的^
and不同$
,后者匹配行首和行尾。
但是,这与替代字符(方括号)无关,因此该序列实际上匹配反斜杠或撇号以外的任何字符。
编辑:
所以从评论来看,这仍然会引起混乱,所以让我们分解一下:
"'\\(?:[^\\']\\|\\(?:\\\\.\\)\\)*'"
该代码计算为此字符串/正则表达式:
'\(?:[^\']\|\(?:\\.\)\)*'
'
匹配撇号
\(?:foo\)*
匹配零个或多个foo
foo\|bar
匹配foo
或bar
[^\']
匹配除反斜杠或撇号以外的任何字符
\(?:\\.\)
可以(在这种情况下,是一个只出现一次的非捕获组)被重写为 simple \\.
,并匹配反斜杠后跟除换行符以外的任何字符。
'
匹配撇号
所以整个事情匹配一个单引号字符串,其中:
- 任何其他单引号都必须以反斜杠开头
- 任何反斜杠必须与另一个非换行符配对(也可以是反斜杠)
当然,这听起来像是一种典型的字符串语法,其中反斜杠可用于转义特殊字符,包括反斜杠本身和分隔引号字符的任何实例。