正確に 3 桁に一致する正規表現を Emacs で作成したいと考えています。たとえば、次のように一致させたいとします。
123
345
789
だがしかし
1234
12
12 23
使用する[0-9]+
と、任意の単一の数字列に一致します。うまくいくと思い[0-9]{3}
ましたが、リビルダーでテストすると、何にも一致しません。
正規表現をインタラクティブに入力し、 を使用したい場合は{3}
、バックスラッシュを使用して中かっこをエスケープする必要があります。数字の長い文字列のどの部分も一致させたくない場合は、 を使用\b
して数字の周囲の単語境界を一致させます。これは次のとおりです。
\b[0-9]\{3\}\b
の詳細については、次のドキュメント\b
を参照してください。
空文字列に一致しますが、単語の先頭または末尾にのみ一致します。したがって、別の単語として
\bfoo\b
出現するすべての に一致します。一致するか、別の単語として。 次のテキストに関係なく、バッファの先頭または末尾に一致します。foo
\bballs?\b
ball
balls
\b
elisp コードからこの正規表現を使用したい場合は、いつものように、もう一度バックスラッシュをエスケープする必要があります。例えば:
(highlight-regexp "\\b[0-9]\\{3\\}\\b")
[0-9][0-9][0-9]
、[0-9]{3}
または\d{3}
「1234」にも一致するため機能しません。
したがって、区切り文字が何であるかによって異なります。
変数にある場合は、実行できます^/[0-9]{3}/$
。空白で区切られている場合は、次のことができます\w+[0-9]{3}\w+
これを使用する必要があります:
"^\d{3}$"
他の人が指摘しているように、3桁以上の数字を一致させる必要があります。数字の前には、行頭または数字ではないものが必要です。emacsが\Dをサポートしている場合は、それを使用してください。それ以外の場合は、セット[^0-9]を使用します。
一言で言えば:
(^|\D)\d{3}(\D|$)
Emacs で正規表現を試してみると、 regex-toolが非常に便利であることがわかりました。
ftp://ftp.newartisans.com/pub/emacs/regex-tool.el
回答ではありません (質問は既に回答されています)。一般的なヒントです。
[0-9][0-9][0-9] は最低3 つの数字に一致するため、Joe が述べたように、(少なくとも) \b または数字を区切るその他のものを含める必要があります。おそらく最も確実な方法は次のとおりです。
[^0-9][0-9][0-9][0-9][^0-9]
それはとても簡単です:
[0-9][0-9][0-9]