Latest web development tutorials

expressions régulières Java

Expression régulière définit la chaîne de modèle.

Les expressions régulières peuvent être utilisés pour rechercher, modifier, ou le traitement de texte.

Les expressions régulières ne sont pas limités à une certaine langue, mais il y a des différences subtiles dans chaque langue.

Java Les expressions régulières Perl et est le plus similaire.

package java.util.regex comprend les trois catégories suivantes:

  • catégories de motifs:

    motif de l'objet est une représentation régulière du compilateur d'expression. classe Motif n'a pas de constructeur public. Pour créer un objet de modèle, vous devez d'abord appeler sa méthode de compilation statique publique qui renvoie un objet Pattern. Cette méthode prend une expression régulière comme premier argument.

  • catégories Matcher:

    objet Matcher est l'interprétation de la chaîne d'entrée et le fonctionnement correspondant du moteur. Comme la classe Motif, Matcher n'a pas de constructeur public. Vous devez appeler l'objet Motif matcher de méthode pour obtenir un objet Matcher.

  • PatternSyntaxException:

    PatternSyntaxException est une classe d'exception non obligatoire qui représente un habitué des erreurs de syntaxe de motif d'expression.


groupe de capture

groupes de capture sont multiples caractères lorsqu'une seule des méthodes de traitement de l'unité, à travers les caractères groupés entre parenthèses pour créer.

Par exemple, l'expression régulière (chien) crée un seul groupe, le groupe qui contient "d", "o" et "g".

groupe de capture en calculant la parenthèse ouverte numérotés de gauche à droite. Par exemple, dans l'expression ((A) (B (C))), il existe quatre de ces groupes:

  • ((A) (B (C)))
  • (A)
  • (B (C))
  • (C)

En appelant le matcher moyen objet GroupCount pour voir combien de paquets expression. méthode GroupCount renvoie un int représentant l'objet de matcher compte actuellement plusieurs groupes de capture.

Il y a un groupe spécial (groupe 0), il représente toujours l'expression entière. Le groupe n'a pas été inclus dans la valeur de retour GroupCount.

Exemples

L'exemple suivant montre comment trouver une chaîne de nombres à partir d'une chaîne donnée:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    public static void main( String args[] ){

      // 按指定模式在字符串查找
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // 创建 Pattern 对象
      Pattern r = Pattern.compile(pattern);

      // 现在创建 matcher 对象
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

Les exemples ci-dessus les résultats compilés sont les suivants:

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

syntaxe d'expression régulière

caractère

explication

\

Le caractère suivant est marqué comme un caractère spécial, le texte, arrière-références ou évasion octal. Par exemple, "n" correspond au caractère "n". "\ N" correspond à un caractère de nouvelle ligne. Séquence "\\" correspond "\", "\ (" Match "(."

^

Faites correspondre la chaîne d'entrée commence. Si vous définissez la propriétéRegExp position de l' objet correspondant multiligneset aussi ^ "\ n" ou "\ r" après.

$

Faites correspondre l'extrémité d'entrée de la position de chaîne. Si la propriétémultiligne de l'objet RegExp,$ correspond également avec le "\ n" ou position "\ r" avant.

*

Zéro ou plusieurs fois correspond au caractère précédent ou sous-expression. Par exemple, zo * correspond à "z" et "zoo". * Equivalent à {0,}.

+

Un ou plusieurs fois correspond au caractère précédent ou sous-expression. Par exemple, "zo +" et "zo" and match "zoo", mais le "z" ne correspondent pas. + Est équivalente à {1}.

?

Zéro ou un correspond au caractère précédent ou sous-expression. Par exemple, «faire (es)?" Correspond le «faire» ou «ne» dans le «faire». ? Equivalent à {0,1}.

{N}

nentier non négatif. Faites correspondre exactementnfois. Par exemple, "o {2}" et "Bob" dans le "o" ne correspond pas, mais la "nourriture" des deux "o" correspondance.

{N}

nentier non négatif. Trouver au moinsnfois. Par exemple, "o {2,}" ne correspond pas au "Bob" dans le "o", and match "foooood" all o. "O {1,}" est équivalent à "o +". "O {0,}" est équivalent à "o *".

{N,m}

Met un entier nonnégatif,n<= m. Trouver au moinsn etau plusmfois. Par exemple, "o {1,3}" matchs "foooooot" dans les trois premiers o. 'O {0,1}' est équivalent à 'o?'. Remarque: Vous ne pouvez pas insérer des espaces entre les virgules et les numéros.

?

Lorsque les personnages suivis dans un autre qualificatif (*, +,?, { N}, {n,}, {n, m}) plus tard, le modèle correspondant est "non-gourmand." motif "non gourmand" correspondant à la recherche d'une éventuelle chaîne courte, et le modèle par défaut "gourmand" correspondant à la recherche d'une éventuelle chaîne longue. Par exemple, dans la chaîne "oooo" dans "o +?" Correspond un seul "o" et "o +" correspondre à tous les "o".

.

Correspond à tout caractère sauf "\ r \ n" est. Pour correspondre à inclure "\ r \ n", y compris l'un des caractères, tels que le mode d'utilisation "[\ s \ S]" ou similaire.

(Pattern)

Lefiltrage et la capture subexpression du match. Vous pouvez utiliser les9 0 $ ... $ propriétés correspondent à des résultats de la collection "correspondant" pour récupérer capturé.Pour correspondre à caractères entre parenthèses (), utilisez "\ (" ou "\)."

(?:Pattern)

PatternMatching , mais ne tient pas compte de la sous - expression de match qui est un match non-capture, l' appariement ne sont pas stockées pour une utilisation ultérieure. Ceci est destiné à être utilisé "ou" caractère (|) lorsque les composants du mode de combinaison utile. Par exemple, 'industr (:? Y | s) est un rapport de «l'industrie | expression plus économique' industries.

(?= Pattern)

Exécution de l' avant prédiction subexpression première chaîne de chaîne de recherchemodèlecorrespondant au point de l'expression correspondante de départ. Il est un match non-capture, qui ne saisit pas le match pour une utilisation ultérieure. Par exemple, 'de Windows (= 95 |? 98 | NT | 2000)' Matching "Windows 2000" "Windows", mais ne correspond pas à la "Windows 3.1" dans le "Windows". Lookahead ne prennent pas le caractère est, après un match se produit, le prochain match pour votre recherche immédiatement après le dernier match, pas après la première prévision de la composition des caractères.

(?!Pattern)

Lookahead subexpression effectuer une recherche inversée, l'expression ne correspond pas aumodèlede chaîne correspondant au point de la chaîne de recherche de départ. Il est un match non-capture, qui ne saisit pas le match pour une utilisation ultérieure. Par exemple, «Windows (95 | 98 ?! | NT | 2000)" correspond à la "Windows 3.1" dans le "Windows", mais ne correspond pas à la "Windows 2000" "Windows". Lookahead ne prennent pas le caractère est, après un match se produit, le prochain match pour votre recherche immédiatement après le dernier match, pas après la première prévision de la composition des caractères.

x|y

Matchxouy.Par exemple, 'z | food' correspond à "z" ou "alimentaire". '(Z | f) ood' allumette "Zood" ou "alimentaire".

[Xyz]

Jeu de caractères. Correspond à tout caractère inclus. Par exemple, "[abc]" correspond à "brut" dans le "a".

[^Xyz]

jeu de caractères inverse. Correspond à tout caractère non inclus. Par exemple, "[^ abc]" correspond à "brut" dans le "p", "l", "i", "n".

[Az]

Gamme de caractères. Correspond à tout caractère dans la plage spécifiée. Par exemple, "[az]" matchs "a" à toutes les lettres minuscules dans la gamme "Z".

[^Az]

gamme inverse de caractères. Correspond à tout caractère pas dans la plage spécifiée. Par exemple, "[^ az]" correspond à tout pas "a" à l'un des personnages de la gamme "Z".

\ B

Correspond à une limite de mot, qui est, la position du mot et les espaces entre. Par exemple, "er \ b" correspond à "jamais" dans "er", mais ne correspond pas au "verbe" dans "er".

\ B

Associez non-limite de mot. "Er \ B" correspond au "verbe" en "er", mais ne correspond pas à «jamais» en "er".

\C x

caractère de contrôle d'alignement indiqué parx.Par exemple, \ cM correspond Control-M ou retour chariot.Lavaleur dexdoit être comprise entre AZ ou az. Dans le cas contraire, on suppose que c est "c" caractère lui-même.

\ D

Matching caractères numériques. Equivalent à [0-9].

\ D

Faites correspondre des caractères non numériques. Il est équivalent à [^ 0-9].

\ F

match de Formfeed. Équivalent à \ x0c et \ cL.

\ N

Faites correspondre un saut de ligne. Équivalent à \ x0a et \ cJ.

\ R

Correspond à un retour chariot. Equivalent à \ x0d et \ cM.

\ S

Matches des caractères blancs, y compris les espaces, les onglets, les sauts de page, etc. Equivalent à [\ f \ n \ r \ t \ v].

\ S

Correspond tous les caractères non-blancs. Equivalent à [^ \ f \ n \ r \ t \ v].

\ T

onglet Match. Et \ x09 et \ cI équivalent.

\ V

Correspond à un caractère de tabulation verticale. Et \ X0B et \ cK équivalent.

\ W

Correspond à tout caractère de classe de caractères, y compris de soulignement. Et "[A-Za-z0-9_]" équivalent.

\ W

Correspond à tout caractère non-mot. Et «[^ A-Za-z0-9_]" équivalent.

\X n

Matchn,n est ici un hexadécimaux codes d'échappement. code d'échappement hexadécimal doit être exactement deux chiffres. Par exemple, "\ x41" correspondant à "A". "\ X041" et "\ x04" et "1" sont équivalents. Permet l'utilisation des expressions régulières du code ASCII.

\Num

Matchnum,num ici est un entier positif. Pour capturer backreferences correspondant. Par exemple, "(.) \ 1» correspond à deux caractères identiques consécutifs.

\N

Identifie un code d'échappement octal ou références arrières. Si \nprécédée par subexpressions au moinsncapturés, alorsnest un backreference. Dans le cas contraire, sinest un nombre octal (0-7), alorsnest un code d'échappement en octal.

\Nm

Identifie un code d'échappement octal ou références arrières. Si \nmen face d'au moinsnmcapture subexpression, puisnmest un backreference. Si \nm, au moins en facedecapturen,n est une référence arrière, suivi du caractèrem.Si les deux cas précédents ne sont pas présents,\nm correspond à la valeur octalnm,netmsont des chiffres octal (0-7).

\ Nml

Lorsquenest un nombre octal(0-3),m etlsont octal (0-7), il correspond à des codes d'échappement octalLNM.

\U n

Matchesn,nest un caractère Unicode représenté par quatre nombres hexadécimaux. Par exemple, \ u00A9 correspond au symbole de copyright (©).

méthodes de classe Matcher

Index Méthode

méthodes d'index fournissent des valeurs d'index utiles indiquent précisément où trouver les correspondances de chaînes d'entrée:

Non . Méthode et description
1 public int start ()
Renvoie l'index initial du match précédent.
2 public int start (groupe int)
Retour en fonctionnement lors du match précédent, capturé par un groupe donné de sous-séquence index initial
3 fin public int ()
Retourne le décalage après le dernier caractère adapté.
4 public int fin (groupe int)
Retour en fonctionnement lors du match précédent, par un décalage donné après le dernier groupe de caractères après la séquence de capture.

Méthodes de recherche

Méthodes utilisées pour vérifier la chaîne d'entrée et renvoie une valeur booléenne indiquant si oui ou non le motif est trouvé:

Non . Méthode et description
1 regarderLes public boolean ()
Essayer la région depuis le début du début de la séquence d'entrée concorde avec le motif.
2 find public boolean ()
Essayer de trouver la séquence d'entrée qui correspond à la configuration de la séquence suivante.
3 public boolean find (int start)
Remet cette matcher puis tente de trouver une correspondance pour le motif, entrer dans le sous-séquence suivante à partir de l'index spécifié.
4 matchs booléennes publics ()
Essayez la région et modèle toute correspondance.

méthode de remplacement

Alternative est de remplacer une chaîne dans la méthode de saisie de texte:

Non . Méthode et description
1 publique Matcher appendReplacement (StringBuffer sb, String remplacement)
Pour obtenir des ajouts non-terminaux et substitutions étape.
2 publique StringBuffer appendTail (StringBuffer sb)
Réaliser des additions terminales et substitutions étape.
3 public String replaceAll (de remplacement String)
Mode Remplacer par la chaîne de remplacement donnée pour correspondre à la séquence d'entrée pour chaque séquence.
4 public String replaceFirst (de remplacement String)
Mode Remplacer par la chaîne de remplacement donnée correspondant à la séquence de la première sous-séquence d'entrée.
5 quoteReplacement public static String (String s)
Renvoie un littéral chaîne de remplacement de chaîne. Cette méthode renvoie une chaîne qui est passée comme une méthode pour le travail en classe appendReplacement Matcher comme une chaîne littérale.

début et fin de la méthode

Voici un exemple du nombre d'occurrences dans la chaîne d'entrée pour compter le mot «chat» apparaît:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    private static final String REGEX = "\\bcat\\b";
    private static final String INPUT =
                                    "cat cat cat cattie cat";

    public static void main( String args[] ){
       Pattern p = Pattern.compile(REGEX);
       Matcher m = p.matcher(INPUT); // 获取 matcher 对象
       int count = 0;

       while(m.find()) {
         count++;
         System.out.println("Match number "+count);
         System.out.println("start(): "+m.start());
         System.out.println("end(): "+m.end());
      }
   }
}

Les exemples ci-dessus les résultats compilés sont les suivants:

Match number 1
start(): 0
end(): 3
Match number 2
start(): 4
end(): 7
Match number 3
start(): 8
end(): 11
Match number 4
start(): 19
end(): 22

Ceci peut être vu en utilisant l'exemple des limites de mots, de veiller à ce que la lettre "c" "a" "t" est pas seulement de longues sous-mot. Il fournit également des informations utiles sur la chaîne d'entrée est adaptée positions.

méthode de début retourne l'opération au cours du match précédent, à partir de l'index donné groupe capturé séquence initiale, la fin de la méthode d'appariement le dernier indice plus un caractère.

allumettes et méthode de regarderLes

les allumettes et les méthodes de regarderLes sont utilisés pour essayer de faire correspondre une séquence de motif d'entrée. Ils sont différents des exigences de l'intégralité du match séquence de matcher, mais regarderLes pas nécessaire.

Ces deux méthodes sont souvent utilisés dans la chaîne d'entrée commence.

Grâce à l'exemple suivant pour expliquer cette fonction:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    private static final String REGEX = "foo";
    private static final String INPUT = "fooooooooooooooooo";
    private static Pattern pattern;
    private static Matcher matcher;

    public static void main( String args[] ){
       pattern = Pattern.compile(REGEX);
       matcher = pattern.matcher(INPUT);

       System.out.println("Current REGEX is: "+REGEX);
       System.out.println("Current INPUT is: "+INPUT);

       System.out.println("lookingAt(): "+matcher.lookingAt());
       System.out.println("matches(): "+matcher.matches());
   }
}

Les exemples ci-dessus les résultats compilés sont les suivants:

Current REGEX is: foo
Current INPUT is: fooooooooooooooooo
lookingAt(): true
matches(): false

méthodes replaceFirst et replaceAll

replaceFirst et replaceAll méthode utilisée pour remplacer le texte correspondant expression régulière. La différence est, replaceFirst remplacer le premier match, ReplaceAll remplacer toutes les correspondances.

L'exemple suivant pour expliquer cette fonction:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    private static String REGEX = "dog";
    private static String INPUT = "The dog says meow. " +
                                    "All dogs say meow.";
    private static String REPLACE = "cat";

    public static void main(String[] args) {
       Pattern p = Pattern.compile(REGEX);
       // get a matcher object
       Matcher m = p.matcher(INPUT); 
       INPUT = m.replaceAll(REPLACE);
       System.out.println(INPUT);
   }
}

Les exemples ci-dessus les résultats compilés sont les suivants:

The cat says meow. All cats say meow.

méthodes appendReplacement et appendTail

classe Matcher fournit également une méthode pour appendTail appendReplacement et remplacer du texte:

Regardez l'exemple suivant pour expliquer cette fonction:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
   private static String REGEX = "a*b";
   private static String INPUT = "aabfooaabfooabfoob";
   private static String REPLACE = "-";
   public static void main(String[] args) {
      Pattern p = Pattern.compile(REGEX);
      // 获取 matcher 对象
      Matcher m = p.matcher(INPUT);
      StringBuffer sb = new StringBuffer();
      while(m.find()){
         m.appendReplacement(sb,REPLACE);
      }
      m.appendTail(sb);
      System.out.println(sb.toString());
   }
}

Les exemples ci-dessus les résultats compilés sont les suivants:

-foo-foo-foo-

méthodes de la classe PatternSyntaxException

PatternSyntaxException est une classe d'exception non obligatoire, ce qui indique un habitué des erreurs de syntaxe de motif d'expression.

classe PatternSyntaxException fournit les méthodes suivantes pour nous aider à voir ce que l'erreur est survenue.

Non . Méthode et description
1 public String getDescription ()
Obtenez une description de l'erreur.
2 public int getIndex ()
Obtenez le mauvais index.
3 public String getPattern ()
Obtenez le modèle d'expression régulière erronée.
4 public String getMessage ()
Retourne une chaîne multi-ligne contenant la description d'une erreur de syntaxe et de son index, une indication visuelle du modèle d'expression régulière erronée, et l'indice d'erreur.