在Lisp函數我有一個正則表達式應該匹配以大寫字母開頭的字符串,下面的測試字符串:emacs的正則表達式來匹配第一個字母大寫
(if (string-match "^[A-Z].+" my-string)
然而,這也匹配小寫起始字符串。我在這裏錯過了什麼?
在Lisp函數我有一個正則表達式應該匹配以大寫字母開頭的字符串,下面的測試字符串:emacs的正則表達式來匹配第一個字母大寫
(if (string-match "^[A-Z].+" my-string)
然而,這也匹配小寫起始字符串。我在這裏錯過了什麼?
從string-match
描述(表明它鍵入C-h f
或M-x describe-function
):在STRING,或零爲REGEXP第一匹配的開始
(string-match REGEXP STRING &optional START)
返回索引。 如果'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))