Emacsで正確に3桁に一致する正規表現を作成したいのですが。たとえば、次のように一致させます。
123
345
789
だがしかし
1234
12
12 23
[0-9]+
を使用する場合、数字の単一の文字列に一致します。 [0-9]{3}
はうまくいくと思いましたが、リビルダーでテストすると何にも一致しません。
対話的に正規表現を入力していて、{3}
を使用したい場合は、中かっこをエスケープするためにバックスラッシュを使用する必要があります。数字のより長い文字列のどの部分にも一致させたくない場合は、\b
を使用して、数字の周りのWord境界を一致させます。これは残します:
\b[0-9]\{3\}\b
\b
の詳細については、 docs をご覧ください。
空の文字列に一致しますが、Wordの最初または最後のみです。したがって、
\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]