4

私は次の正規表現を持っています:

 ^\d{1,5}.*[^0-9][0-9]{5}$

および次のテキスト: 123 King Drive 12 OH 12345

1 ~ 5 桁の数字で始まり 5 桁の数字で終わり、その間に他の数字がない文字列を照合したい。しかし、 12312345の間にある12のためにスキップする必要がありますが、常にテキスト全体を一致として取得します。

なぜこうなった?[^0-9]トリックをするべきではありませんか?

4

4 に答える 4

4

要件の説明に基づいて、これが必要なようです:

^\d{1,5}[^0-9]*[0-9]{5}$

その.*部分は何でも一致していたので、数字を除外していません。

于 2013-07-25T13:42:43.353 に答える
2

問題は、どれが.*にでも一致するかということです。

^\d{1,5}[^0-9]+[0-9]{5}$

またはよりコンパクトに

^\d{1,5}\D+\d{5}$

\D数字以外のすべてに一致します。\D*開始桁と終了桁の間に何もない文字列を許可する場合に使用できます。

于 2013-07-25T13:42:40.263 に答える
2

必要なもの:

^\d{1,5}\D*\d{5}$

これは、「1 ~ 5 桁の数字の後に任意の数の数字以外の文字が続き、その後に 5 桁の数字が続く」と読みます。少なくとも 1 つの数字以外の文字が必要な場合は、 を使用します\D+

以前の正規表現は、一致し、単一の文字に一致するため、' King Drive 12 OH'一致.*します。' '[^0-9]

于 2013-07-25T13:42:45.463 に答える
2

あなたの正規表現で:

^\d{1,5}.*[^0-9][0-9]{5}$

そして例のテキスト:

123 King Drive 12 OH 12345

--

^\d{1,5} は「123」に一致します

.* は「キングドライブ 12 OH」に一致します。

[^0-9] は " " に一致します

[0-9]{5}$ は「12345」に一致します

他の人も示唆しているように、文字列の途中にある非数字と一致しないように (「.*」を使用するのとは異なり) 明示的に言っているので、このようなものはこの問題を回避します:

^\d{1,5}\D+\d{5}$
于 2013-07-25T14:13:40.537 に答える