Answers:
您的字符串可能具有嵌入的换行符,在这种情况下,它\'
与字符串的末尾匹配,但$
恰好在换行符char之前。
引用Elisp手册,节点Regexp Special:
当匹配字符串而不是缓冲区时,$匹配在字符串的末尾或换行符之前。
同样,\`
匹配字符串的开头,但^
匹配换行符char之后。再次,手册:
当匹配字符串而不是缓冲区时,“ ^”匹配字符串的开头或换行符之后。
因此,对于字符串,通常要使用\`
和\'
,尤其是如果您的代码无法提前知道字符串中是否可能包含换行符。对于缓冲区中的文本,通常使用^
和$
。
(string-match "^foo" "foo") ; => 0
(string-match "\\`foo" "foo") ; => 0
(string-match "^foo" "bar\nfoo") ; => 4
(string-match "\\`foo" "bar\nfoo") ; => nil
(string-match "foo$" "foo") ; => 0
(string-match "foo\\'" "foo") ; => 0
(string-match "foo$" "foo\nbar") ; => 0
(string-match "foo\\'" "foo\nbar") ; => nil
^
和$
匹配的开始和结束行。
\`
并\'
匹配整个字符串的开始和结束。
there are ` and ' characters available. [...] they seem to also match the start or end of strings
特殊字符为:. * + ? ^ $ \ [
。
括号之间 []
,以下内容也很特殊:] - ^
当使用反斜杠时,包括反引号`和单引号'在内的许多字符会变得特殊。看这里更多详细信息,。
Could someone please explain the difference between these special characters, with an example and recommendation on when to use them?
两者之间有区别 beginning of string
和beginning of each line in the string
。
由Ergoemacs提供。你可以在这里阅读更多
$
,他们依靠的是不包含换行符的文件名。这通常是(非常)安全的假设,但不能保证。\\'
因此,使用是最佳实践。