単一の正規表現でこの特定の問題を解決しない方がはるかに簡単です。
まず、\b
ゼロ幅です。したがって、 を使用してそれに従う必要はありません。?
意図はおそらく\s?
です。
次に、一般的なケースでは、正規表現はほとんどステートレスです。つまり、次のように正規表現を作成する必要があります。
^\s*(one\s*,(two\s*,(three\s*,four|four\s*,three)|three\s*,(two\s*,four|four\s*,two)...
ご覧のとおり、組み合わせ爆発を手動で処理する必要があります。これは理想とはかけ離れています。
代わりに、分割し,
て Java を使用して確認する必要があります。
返信ありがとうございます。私が理解していることから、正規表現を使用するのではなく、Java を使用することを望んでいます。Java をチェックインする方法について少し詳しく教えてください
これを試してください(テストされていないコードはバグになります):
public parseList(String input) {
String[] numbers = { "one", "two", "three", "four" };
bool foundNumbers = { false, false, false, false };
String delims = "\s*,";
String[] tokens = input.split(delims);
if (tokens.length != 4) {
//deal with error case as you wish
}
for (int i = 0; i < numbers.length; ++i) {
for (int j = 0; j < tokens.length; ++j) {
if (numbers[i].equals(tokens[j])) {
if (!foundNumbers[i]) {
foundNumbers[i] = true;
} else {
//deal with error case as you wish
}
}
}
}
for (int i = 0; i < foundNumbers.length; ++i) {
if (!foundNumbers[i]) {
//deal with error case as you wish
}
}
//success
}