3

lisp関数で、大文字で始まる任意の文字列に一致する正規表現を使用した次のテストがあります。

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

ただし、これは小文字の開始文字列にも一致します。ここで何が欠けていますか?

4

2 に答える 2

4

説明から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))
于 2012-10-10T07:26:23.373 に答える
1

さらに悪いことに注意してください。文字列の先頭だけでなく、その文字列内の任意の行の先頭にも一致"...\nHello"するため、ドットで始まっていても一致します。^文字列の先頭にのみ一致する正規表現演算子は\`です。以下を使用することをお勧めします:

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