在 lisp 函数中,我使用正则表达式进行了以下测试,该正则表达式应该匹配任何以大写字母开头的字符串:
(if (string-match "^[A-Z].+" my-string)
然而,这也匹配小写的起始字符串。我在这里想念什么?
在 lisp 函数中,我使用正则表达式进行了以下测试,该正则表达式应该匹配任何以大写字母开头的字符串:
(if (string-match "^[A-Z].+" my-string)
然而,这也匹配小写的起始字符串。我在这里想念什么?
从string-match
描述(显示类型C-h f
或M-x describe-function
):
(string-match REGEXP STRING &optional START)
返回 STRING 中 REGEXP 的第一个匹配项的开始索引,或 nil。如果 `case-fold-search' 不为 nil,匹配会忽略大小写。
刚设置case-fold-search
为nil
。
(let ((case-fold-search nil))
(string-match "^[A-Z].+" my-string))
请注意,它更糟糕:"...\nHello"
即使它以点开头也匹配,因为^
不仅匹配字符串的开头,还匹配该字符串中任何行的开头。仅匹配字符串开头的正则表达式运算符是 \`。我建议您使用:
(let ((case-fold-search nil)) (string-match "\\`[[:upper:]]" my-string))