3

在 lisp 函数中,我使用正则表达式进行了以下测试,该正则表达式应该匹配任何以大写字母开头的字符串:

(if (string-match "^[A-Z].+" my-string)

然而,这也匹配小写的起始字符串。我在这里想念什么?

4

2 回答 2

4

string-match描述(显示类型C-h fM-x describe-function):

(string-match REGEXP STRING &optional START)

返回 STRING 中 REGEXP 的第一个匹配项的开始索引,或 nil。如果 `case-fold-search' 不为 nil,匹配会忽略大小写。

刚设置case-fold-searchnil

(let ((case-fold-search nil))
 (string-match "^[A-Z].+"  my-string))
于 2012-10-10T07:26:23.373 回答
1

请注意,它更糟糕:"...\nHello"即使它以点开头也匹配,因为^不仅匹配字符串的开头,还匹配该字符串中任何行的开头。仅匹配字符串开头的正则表达式运算符是 \`。我建议您使用:

(let ((case-fold-search nil)) (string-match "\\`[[:upper:]]" my-string))
于 2012-10-10T13:25:11.190 回答