以下が一致する必要があります。
AAA123
ABCDEFGH123
XXXX123
".*123"
できますか?
はい、できます。それはうまくいくはずです。
.
=任意の文字\.
=実際のドット文字.?
= .{0,1}
=任意のcharに0回または1回一致します.*
= .{0,}
=任意のcharに0回以上一致します.+
= .{1,}
=任意の文字に1回以上一致はい、うまくいきますが、式をコンパイルするときに _ dotall _ フラグを渡さない限り、.
は改行に一致しません。
Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
任意の文字に1回一致するには.
、任意の文字に0回以上一致するには.*
、1回以上の任意の文字に一致する.+
を使用します。
洗練された正規表現テストおよび開発ツールはたくさんありますが、Javaで単純なテストハーネスが欲しい場合は、以下のものを試してみてください。
String[] tests = {
"AAA123",
"ABCDEFGH123",
"XXXX123",
"XYZ123ABC",
"123123",
"X123",
"123",
};
for (String test : tests) {
System.out.println(test + " " +test.matches(".+123"));
}
これで、新しいテストケースを簡単に追加して新しいパターンを試すことができます。正規表現を探索して楽しんでください。
いいえ、*
はゼロ個以上の文字に一致します。代わりに1つ以上のものに一致する+
を使用してください。
この表現はあなたにとってよりうまくいくかもしれません:[A-Z]+123
正規表現を試してください。{3、}。これは、改行が必要なすべての文字と一致します。
例題の問題に対する具体的な解決策 -
試してみてください[A-Z] * 123 $ 123、AAA123、ASDFRRF123と一致します。 123の前に少なくとも文字が必要な場合は、[A-Z] + 123 $を使用してください。
質問に対する一般的な解決策(正規表現の「任意の文字」と一致させる方法): -
私がこれをエンコードするのを見た最も一般的な方法は、そのメンバーがすべての可能な文字のセットのパーティションを形成する文字クラスを使うことです。
通常[\s\S]
、[\w\W]
などはすべてうまくいきますが、人々はそれを[\d\D]
(空白または非空白)と書きます。
あなたがちょうど任意の文字をチェックすることに興味があるならば、私を助けたもの
[^]+