Emacs正则表达式匹配首字母大写的字符串

3
在一个Lisp函数中,我使用了以下正则表达式进行测试,它应该匹配任何以大写字母开头的字符串:
(if (string-match "^[A-Z].+" my-string)

然而,这也匹配小写字母开头的字符串。我在这里漏掉了什么?
2个回答

4

以下是从 string-match 的描述中翻译的内容(要显示它,请键入C-h fM-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))

1
请注意,情况更糟:它还匹配了"...\nHello",即使它以一个点开头,因为^不仅匹配字符串的开头,还匹配该字符串内任何行的开头。只匹配字符串开头的正则表达式运算符是\`。我建议您使用以下内容:
(let ((case-fold-search nil)) (string-match "\\`[[:upper:]]" my-string))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接