web-dev-qa-db-ja.com

正規表現の "任意の文字"に一致させる方法は?

以下が一致する必要があります。

AAA123
ABCDEFGH123
XXXX123

".*123"できますか?

221
Saobi

はい、できます。それはうまくいくはずです。

  • . =任意の文字
  • \. =実際のドット文字
  • .? = .{0,1} =任意のcharに0回または1回一致します
  • .* = .{0,} =任意のcharに0回以上一致します
  • .+ = .{1,} =任意の文字に1回以上一致
514
Delan Azabani

はい、うまくいきますが、式をコンパイルするときに _ dotall _ フラグを渡さない限り、.は改行に一致しません。

Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();

任意の文字に1回一致するには.、任意の文字に0回以上一致するには.*、1回以上の任意の文字に一致する.+を使用します。

15
thr

洗練された正規表現テストおよび開発ツールはたくさんありますが、Javaで単純なテストハーネスが欲しい場合は、以下のものを試してみてください。

    String[] tests = {
        "AAA123",
        "ABCDEFGH123",
        "XXXX123",
        "XYZ123ABC",
        "123123",
        "X123",
        "123",
    };
    for (String test : tests) {
        System.out.println(test + " " +test.matches(".+123"));
    }

これで、新しいテストケースを簡単に追加して新しいパターンを試すことができます。正規表現を探索して楽しんでください。

また見なさい

10

いいえ、*はゼロ個以上の文字に一致します。代わりに1つ以上のものに一致する+を使用してください。

この表現はあなたにとってよりうまくいくかもしれません:[A-Z]+123

7
Huusom

正規表現を試してください。{3、}。これは、改行が必要なすべての文字と一致します。

2
Ravi Shekhar

例題の問題に対する具体的な解決策 -

試してみてください[A-Z] * 123 $ 123、AAA123、ASDFRRF123と一致します。 123の前に少なくとも文字が必要な場合は、[A-Z] + 123 $を使用してください。

質問に対する一般的な解決策(正規表現の「任意の文字」と一致させる方法): -

  1. 空白を含むものを探しているなら、[\ w |\W] {min_char_to_match、}を試すことができます。
  2. 空白以外のものにマッチさせようとしているなら、[\ S] {min_char_to_match、}を試すことができます。
2

私がこれをエンコードするのを見た最も一般的な方法は、そのメンバーがすべての可能な文字のセットのパーティションを形成する文字クラスを使うことです。

通常[\s\S][\w\W]などはすべてうまくいきますが、人々はそれを[\d\D](空白または非空白)と書きます。

0
Jamie Davis

あなたがちょうど任意の文字をチェックすることに興味があるならば、私を助けたもの

[^]+
0
vipin goyal