web-dev-qa-db-fra.com

Comment faire correspondre "n'importe quel caractère" dans une expression régulière?

Les éléments suivants doivent correspondre:

AAA123
ABCDEFGH123
XXXX123

puis-je faire: ".*123"?

195
Saobi

Oui, vous pouvez. Cela devrait fonctionner.

  • . = n'importe quel caractère
  • \. = le caractère de point réel
  • .? = .{0,1} = correspond à n'importe quel caractère zéro ou une fois
  • .* = .{0,} = correspond à n'importe quel caractère zéro ou plus
  • .+ = .{1,} = correspond à tout caractère une ou plusieurs fois
482
Delan Azabani

Oui, cela fonctionnera, mais notez que . ne correspondra pas aux nouvelles lignes sauf si vous passez le drapeau DOTALL lors de la compilation de l'expression:

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

Utilisez le modèle . pour faire correspondre un caractère une fois, .* pour faire correspondre un caractère à zéro ou plusieurs fois, .+ pour faire correspondre un ou plusieurs caractères.

12
thr

Il existe de nombreux outils sophistiqués de test et de développement de regex, mais si vous voulez juste un test simple en Java, en voici un pour vous:

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

Maintenant, vous pouvez facilement ajouter de nouveaux cas de test et essayer de nouveaux modèles. Amusez-vous explorer regex.

Voir également

10

Non, * correspondra à zéro ou plusieurs caractères. Vous devez utiliser +, qui correspond à un ou plusieurs à la place.

Cette expression pourrait mieux fonctionner pour vous: [A-Z]+123

6
Huusom

Essayez la regex. {3,}. Cela correspondra à tous les personnages attendent une nouvelle ligne.

2
Ravi Shekhar

Le moyen le plus courant que j'ai vu pour coder ceci est avec une classe de caractères dont les membres forment une partition de l'ensemble de tous les caractères possibles.

Habituellement, les gens écrivent cela en tant que [\s\S] (espace ou non-espace), bien que [\w\W], [\d\D], etc. fonctionnent tous.

0
Jamie Davis

Celui qui m'a aidé, au cas où vous seriez intéressé de vérifier n'importe quel personnage

[^]+
0
vipin goyal

Solution spécifique à l'exemple de problème: -

Essayez [A-Z] * 123 $ correspondra à 123, AAA123, ASDFRRF123. Si vous avez besoin d'au moins un caractère avant 123, utilisez [A-Z] + 123 $.

Solution générale à la question (comment faire correspondre "n'importe quel caractère" dans l'expression régulière): -

  1. Si vous recherchez quelque chose, y compris des espaces, vous pouvez essayer [\ w |\W] {min_char_to_match,}.
  2. Si vous essayez de faire correspondre quelque chose à part les espaces, vous pouvez essayer [\ S] {min_char_to_match,}.
0
Akash Seth