在一个Lisp函数中,我使用了以下正则表达式进行测试,它应该匹配任何以大写字母开头的字符串:
然而,这也匹配小写字母开头的字符串。我在这里漏掉了什么?
(if (string-match "^[A-Z].+" my-string)
然而,这也匹配小写字母开头的字符串。我在这里漏掉了什么?
(if (string-match "^[A-Z].+" my-string)
以下是从 string-match
的描述中翻译的内容(要显示它,请键入C-h f
或M-x describe-function
):
(string-match REGEXP STRING &optional START)
返回字符串中第一个正则表达式匹配项的起始索引,或者返回 nil。 如果 `case-fold-search' 变量为非空,则匹配忽略大小写。
只需将变量 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))