8
votes

Et opérateur dans des expressions régulières

J'ai cherché un moment comment utiliser le fonctionnement logique et dans des expressions régulières en Java et ont échoué.
J'ai essayé de faire comme recommandé dans un sujet similaire: xxx pré>

et cela ne fonctionne pas. Même des exemples simples avec? = Retourne faux: p> xxx pré>

aussi j'ai lu que (expression x) (expression y) code> devrait fonctionner comme X et y code>, mais cela fonctionne comme x ou y code>.
Qu'est-ce que je fais mal? P>

ajouté: Essayé d'ajouter . * Code> à la fin. Toujours ne travaille pas.
Pour un exemple: p>

[2-9]? [0-9] {5,9} || 1 [2-9] [0-9] {1,2} || 120 [0-9] {1,1} || 119 [0-9] Code> = x - Renvoie false si le numéro est inférieur à 1190 p>

[0-9] { 1,3} || 1 [0-0] [0-9] {1,2} || 11 [0-8] [0-9] {1,1} || 119 [0-2] Code> = y - renvoyer false si le numéro est supérieur à 1992. P>

String a = "1189";
a.matches(X) // return false
a.mathes(Y)  // return true
a.matches((?=X)(?=Y).*) // return true, but should return false.


3 commentaires

(expression x) (expression y) fonctionne comme "expression x puis expression y".


Dupliqué possible de Expressions régulières: y a-t-il un opérateur?


Votre regex a tort: ​​toutes les chaînes vides (parce que vous utilisez || ) et le premier correspond à 121 , par exemple. Re-cochez chaque partie de votre regex, s'il vous plaît.


3 Réponses :


7
votes

(? = fonctionne .

Qu'est-ce que vous faites mal, c'est que vous utilisez correspondant mais votre regex ne correspond à rien.

(? = est un Large positive zéro look-avenir : Ne "consomme" pas de caractères, mais vérifie simplement que sa position est suivie de quelque chose qui correspond à son contenu.

SO remplacez votre correspondances () appelez avec correspondeur.Find () ou assurez-vous que vous avez quelque chose dans votre regex qui correspond à la chaîne entière (. * est un candidat commun).


1 commentaires

Merci pour la réponse rapide. Mais ne travaille toujours pas. J'ai mis à jour le poste avec l'exemple.



1
votes

Comme Joachim répondit, ajoutez un . * à la fin: xxx


0 commentaires

9
votes

Je pense que ce dont vous avez besoin est (? = x) y

  • (? = x) correspond à x, sans le consommer (largeur zéro)
  • y et correspond à y

    Le problème principal: X et Y sont fausses, ils doivent être (supposer 4 chiffres):

    x: 119 [0-9] | 1 [2-9 ] [0-9] {2} | [2-9] [0-9] {3}

    • 1190-1199, ou
    • 1200-1999, ou
    • 2000-9999

      y: 1 [0-8] [0-9] {2} | 19 [0-8] [0-9] | 199 [0-2] < / p>

      • 1000-1899, ou
      • 1900-1980, ou
      • 1990-1992

        Voici un code de test: xxx


1 commentaires

+1 pour l'analyse complète de la question mise à jour. J'étais trop paresseux pour ça ;-)