0

次の正規表現は、1 ~ 3 桁の任意のグループと、4 つの非空白文字の任意のグループを表します。

^([\d]{1,3})?(\S{4})?$

私の問題は、444EEE を入力すると、最初のグループを 444 として最初に一致させ、末尾の EEE が 4 文字で構成されていないために終了するのではなく、Java がそれを 44 + 4EEE として一致させることです。では、どうすれば最後のグループの左向きの貪欲さを回避できるので、最後から 2 番目のグループが最初に消費します。「?+」ですか

ありがとうございました

4

1 に答える 1

2

使用する

boolean foundMatch = subjectString.matches("(\\d{0,3}+)(\\S{4})");

+数量詞の後の余分なもの{0,3}は、正規表現エンジンに最初のグループにバックトラックしないように指示します(いわゆる所有格数量詞)。

于 2012-06-14T11:08:24.927 に答える