web-dev-qa-db-ja.com

Emacsで正確に3桁の正規表現を作成するにはどうすればよいですか?

Emacsで正確に3桁に一致する正規表現を作成したいのですが。たとえば、次のように一致させます。

123
345
789

だがしかし

1234
12
12 23

[0-9]+を使用する場合、数字の単一の文字列に一致します。 [0-9]{3}はうまくいくと思いましたが、リビルダーでテストすると何にも一致しません。

17
Alex B

対話的に正規表現を入力していて、{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")
40
Joe Hildebrand

[0-9][0-9][0-9][0-9]{3}または\d{3}「1234」にも一致するため、機能しません。

したがって、区切り文字が何であるかによって異なります。

変数内にある場合は、^/[0-9]{3}/$。空白で区切られている場合は、\w+[0-9]{3}\w+

8
SCdF

あなたはこれを使うべきです:

"^\d{3}$"
2

他の人が指摘するように、3桁以上の数字を照合する必要があります。数字の前に、ラインスタートか数字ではない何かが必要です。 emacsが\ Dをサポートしている場合は、それを使用します。それ以外の場合は、セット[^ 0-9]を使用します。

一言で言えば:

(^|\D)\d{3}(\D|$)
2
Antti Rasinen

Emacsで正規表現を試してみると、regex-toolは非常に便利です。

ftp://ftp.newartisans.com/pub/emacs/regex-tool.el

答えではなく(質問はすでに答えられています)、単なる一般的なヒントです。

1
Chopmo

[0-9] [0-9] [0-9]は最小の3つの数値に一致するため、Joeが述べたように、(少なくとも)\ bまたはその他の何かを含める必要があります番号を区切ります。おそらく最も確実な方法は次のとおりです。

[^ 0-9] [0-9] [0-9] [0-9] [^ 0-9]

0
decibel