Latest web development tutorials

expresiones regulares Java

expresión regular define la cadena patrón.

Las expresiones regulares se pueden utilizar para buscar, editar, o el procesamiento de texto.

Las expresiones regulares no están limitados a un determinado idioma, pero existen diferencias sutiles en cada idioma.

Java y Perl expresiones regulares es la más parecida.

java.util.regex paquete incluye las siguientes tres categorías:

  • categorías patrón:

    modelo objeto es una representación regular la expresión compilador. Patrón de clase no tiene constructor público. Para crear un objeto del modelo, primero debe llamar a su método de compilación estática pública que devuelve un objeto del modelo. Este método toma una expresión regular como primer argumento.

  • matcher categorías:

    matcher objeto es la interpretación de la cadena de entrada y operación de adaptación del motor. Al igual que la clase Pattern, Matcher no tiene ningún constructor público. Es necesario llamar el objeto patrón de coincidencias método para obtener un objeto Matcher.

  • PatternSyntaxException:

    PatternSyntaxException es una clase de excepción no obligatoria que representa un regular errores de sintaxis patrón de expresión.


grupo de captura

grupos de captura son múltiples caracteres cuando una sola unidad de métodos de tratamiento, a través de los distintos grupos entre paréntesis para crear.

Por ejemplo, la expresión regular (perro) crea un solo grupo, el grupo que contiene "d", "o" y "g".

grupo de captura mediante el cálculo de su paréntesis de apertura numerados de izquierda a derecha. Por ejemplo, en la expresión ((A) (B (C))), hay cuatro de tales grupos:

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

Llamando al objeto matcher manera groupCount para ver cuántos paquetes expresión. groupCount método devuelve un int que representa el objeto matcher actualmente cuenta con varios grupos de captura.

Hay un grupo especial (grupo 0), que representa siempre la totalidad de la expresión. El grupo no está incluido en el valor de retorno groupCount.

Ejemplos

El siguiente ejemplo muestra cómo encontrar una cadena de números de una cadena dada:

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");
      }
   }
}

Los ejemplos anteriores resultados compilados son los siguientes:

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

sintaxis de expresiones regulares

carácter

explicación

\

El siguiente carácter está marcado como un carácter especial, de texto, de vuelta de referencias o de escape octal. Por ejemplo, "n" coincide con el carácter "n". "\ N" coincide con un carácter de nueva línea. Secuencia "\\" coincidencias "\" "\ (" Match "(".

^

Coincide comienza la cadena de entrada. Si se establece la propiedad de posiciónRegExp objeto coincidente de líneas múltiplesy también ^ "\ n" o "\ r" después.

$

Coincidir con el extremo de entrada de la posición de la cadena. Si la propiedadMultiline del objeto RegExp,$ también coincide con la posición "\ r" "\ n" o antes.

*

Cero o más veces coincide con el carácter anterior o sub-expresión. Por ejemplo, una zo * coincide con "z" y "zoo". * Equivalente a {0,}.

+

Una o más veces coincide con el carácter anterior o sub-expresión. Por ejemplo, "zo +" y "zo" y combinar "zoo", pero la "z" no coinciden. + Es equivalente a {1}.

?

Cero o uno coincide con el carácter anterior o sub-expresión. Por ejemplo, "hacer (es)?" Coincide con el "hacer" o "sí" en el "hacer". ? Equivalente a {0,1}.

{N}

nentero no negativo. Coincidir exactamentenveces. Por ejemplo, "o {2}" y "Bob" en la "o" no coincide, pero el "alimento" de los dos "o" partido.

{N,}

nentero no negativo. Al menosnveces. Por ejemplo, "o {2}" no coincide con el "Bob" en la "o", y combinar "cooooomida" todo o. "O {1,}" es equivalente a "o +". "O {0,}" es equivalente a "o *".

{N,m}

My un número entero no negativon,donden<= m. Al menosn ycomo muchomveces. Por ejemplo, "o {1,3}" coincidencias "cooooomida" en los primeros tres o. 'O {0,1}' es equivalente a 'o?'. Nota: No se puede insertar espacios entre las comas y los números.

?

Cuando los personajes seguirse en cualquier otra clasificación (*, +,?, { N}, {n,}, {n, m}) más tarde, la coincidencia de patrones es "no voraz". "No voraz" coincidencia de patrones para buscar posibles cadena corta, y el patrón por defecto "codiciosos" a juego para buscar posibles cadena larga. Por ejemplo, en la cadena "oooo" en "o +?" Encaja en una única "o", y "o +" coincidir con todos "o".

.

Coincide con cualquier carácter excepto "\ r \ n" es. Para hacer coincidir incluir "\ r \ n", incluyendo cualquiera de los caracteres, tales como el patrón de uso "[\ s \ S]" o similares.

(Patrón)

Laconcordancia depatronesy la captura subexpresión del partido. Puede utilizar las propiedades$ 0 ... $ 9 coinciden con los resultados de la colección "juego" para recuperar capturado.Para que coincida con los caracteres de paréntesis (), utilice "\ (" o "\)".

(?:Patrón)

lacomparaciónde patrones,pero no captura la subexpresión partido que se trata de una lucha no captura, coincidente no se almacena para su uso posterior. Esto es para uso "o" carácter (|) cuando los componentes del modo de combinación útil. Por ejemplo, 'industr (?: Y | s) es una relación de' la industria | expresión más económico industrias.

(?= Patrón)

Realización hacia adelante subexpresión predicción primera cadena de texto a buscarlacoincidenciade patronesen el punto de partida de la coincidencia de expresión. Es un partido del no-captura, que no capta el partido para su uso posterior. Por ejemplo, 'de Windows (= 95 |? 98 | NT | 2000)' Matching "Windows 2000" "Windows", pero no coincide con el "Windows 3.1" en el "Windows". Lookahead no tienen carácter es, después se produce una coincidencia, el siguiente resultado de su búsqueda inmediatamente después del último partido, no después de que el primer pronóstico en la composición de caracteres.

(?!Patrón)

Lookahead subexpresión realizar una búsqueda inversa, la expresión no coincide con elpatrón decadena coincidente en el punto de partida de la cadena de búsqueda. Es un partido del no-captura, que no capta el partido para su uso posterior. Por ejemplo, 'de Windows (95 | ?! 98 | NT | 2000)' coincide con el "Windows 3.1" en el "Windows", pero no coincide con el "Windows 2000" de "Windows". Lookahead no tienen carácter es, después se produce una coincidencia, el siguiente resultado de su búsqueda inmediatamente después del último partido, no después de que el primer pronóstico en la composición de caracteres.

x|y

Partidoxoy. Por ejemplo, 'z | alimentos' coincide con "z" o "alimento". '(Z | f) ood "partido" Zood "o" alimento ".

[Xyz]

juego de caracteres. Coincide con cualquier carácter incluido. Por ejemplo, "[abc]" coincide con "formato" en la "a".

[^XYZ]

juego de caracteres inversa. Coincide con cualquier carácter no incluido. Por ejemplo, "[^ abc]" coincide "normal" en el "p", "L", "i", "n".

[AZ]

Rango de caracteres. Coincide con cualquier carácter dentro del rango especificado. Por ejemplo, "[az]" coincidencias "a" a cualquier letras minúsculas en el rango de "z".

[^Az]

rango inverso de caracteres. Coincide con cualquier carácter no está dentro del rango especificado. Por ejemplo, "[^ az]" coincide con cualquier no "a" a cualquiera de los caracteres en el rango de "z".

\ B

Coincide con un límite de palabra, es decir, la posición de la palabra y los espacios entre. Por ejemplo, "ca \ b" coincide "nunca" en "ER", pero no coincide con el "verbo" en "er".

\ B

Coincidir con límite de palabra. "Er \ B" coincide con el "verbo" en "ER", pero no coincide "nunca" en "er".

\C x

carácter de control de ajuste indicado porx.Por ejemplo, \ cm coincide con Control-M o retorno de carro.Elvalor dexdebe ser de entre AZ o az. Si no, se supone que c es el carácter "c" en sí.

\ D

Coincidencia de caracteres numéricos. Equivale a [0-9].

\ D

Coincidir con caracteres no numéricos. Es equivalente a [^ 0-9].

\ F

partido de avance. Equivalente a \ x0c y \ cl.

\ N

A una nueva línea. Equivalente a \ x0a y \ cJ.

\ R

Coincide con un retorno de carro. Equivalente a \ x0d y \ cm.

\ S

Coincide con cualquier espacio en blanco, incluidos los espacios, tabulaciones, saltos de página, etc. Equivale a [\ f \ n \ r \ t \ v].

\ S

Coincide con cualquier carácter no está en blanco. Equivalente a [^ \ f \ n \ r \ t \ v].

\ t

pestaña partido. Y \ x09 y \ ci equivalente.

\ V

Coincide con un carácter de tabulación vertical. Y \ x0b y \ cK equivalente.

\ W

Coincide con cualquier carácter de clase de caracteres, incluido el subrayado. Y "[A-Za-z0-9_]" equivalente.

\ W

Coincide con cualquier carácter que no sea la palabra. Y "[^ A-Za-z0-9_]" equivalente.

\X n

Partidon,n que aquí hay una códigos de escape hexadecimales. código de escape hexadecimal debe ser exactamente dos dígitos. Por ejemplo, "\ x41" juego "A". "\ X041" y "\ x04" y "1" son equivalentes. Permite el uso del código ASCII regular de expresiones.

\Num

num partido,num aquí es un entero positivo. Para capturar a juego de referencias hacia atrás. Por ejemplo, "(.) \ 1" coincide con dos caracteres idénticos consecutivos.

\N

Identifica un código de escape octal o copias de referencias. Si \nprecedido por al menos subexpresiones capturadasn,entoncesnes una referencia hacia atrás. De lo contrario, sines un número octal (0-7), entoncesnes un códigos de escape octales.

\Nm

Identifica un código de escape octal o copias de referencias. Si \nmfrente a subexpresión captura de al menosnm,entoncesnmes una referencia hacia atrás. Si \nmal menos en frentede ncaptura,nes un referencia inversa, seguido por el carácterm.Si los dos casos anteriores no están presentes,\nm partidos valor octalnm,dondenymson dígitos octales (0-7).

\ Nml

Cuandones un número octal(0-3),M yLson octal (0-7), que coincide con los códigos de escape octalesNML.

\U n

Partidosn,dondenes un carácter Unicode representado por cuatro números hexadecimales. Por ejemplo, \ u00A9 coincide con el símbolo de copyright (©).

métodos de la clase Matcher

Método Índice

Índice métodos proporcionan valores de índice de utilidad indican con precisión dónde encontrar las coincidencias cadena de entrada:

No. Método y Descripción
1 inicio public int ()
Devuelve el índice inicial del partido anterior.
2 inicio public int (int grupo)
De nuevo en funcionamiento durante el partido anterior, capturado por un grupo dado de índice inicial subsecuencia
3 final public int ()
Devuelve el desplazamiento después del último carácter igualada.
4 final public int (int grupo)
De nuevo en funcionamiento durante el partido anterior, por un offset dado después de que el último grupo de caracteres después de la secuencia de captura.

Métodos de investigación

Los métodos utilizados para comprobar la cadena de entrada y devuelve un valor booleano que indica si el patrón se encuentra:

No. Método y Descripción
1 lookingat public boolean ()
Probar la zona desde el comienzo del comienzo de la secuencia de entrada coincide con el patrón.
2 hallazgo public boolean ()
Tratar de encontrar la secuencia de entrada que coincida con el patrón de la siguiente secuencia.
3 hallazgo public boolean (inicio int)
Restablece este matcher y luego intenta encontrar una coincidencia para el patrón, introduzca la siguiente sub-secuencia de arranque desde el índice especificado.
4 partidos booleanos públicos ()
Trate de todo el juego región y el patrón.

método de sustitución

Alternativa es reemplazar una cadena en el método de entrada de texto:

No. Método y Descripción
1 pública Matcher appendReplacement (StringBuffer sb, Cadena de reemplazo)
Para lograr adiciones no terminales y sustituciones paso.
2 pública StringBuffer appendTail (StringBuffer sb)
Lograr adiciones y sustituciones terminales paso.
3 Cadena replaceAll pública (sustitución de cuerda)
el modo de reemplazo con la cadena de sustitución dada para que coincida con la secuencia de entrada para cada secuencia.
4 Cadena replaceFirst pública (sustitución de cuerda)
el modo de reemplazo con la cadena de sustitución dada coincide con la secuencia de entrada de la primera sub-secuencia.
5 pública quoteReplacement static String (String s)
Devuelve una cadena de reemplazo literal de cadena. Este método devuelve una cadena que se pasa como un método de trabajo de la clase Matcher appendReplacement como una cadena literal.

iniciar y fin del método

Este es un ejemplo del número de apariciones en la cadena de entrada para el recuento de la palabra aparece "gato":

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());
      }
   }
}

Los ejemplos anteriores resultados compilados son los siguientes:

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

Esto se puede ver usando el ejemplo límites de las palabras, para asegurar que la letra "c" "a" "t" no es sólo un largo subseries de palabras. También proporciona información útil acerca de la cadena de entrada se corresponde posiciones.

método Start devuelve la operación durante el partido anterior, de entre el grupo capturado subsecuencia determinado índice inicial, termina el método de hacer coincidir el último índice más un carácter.

partidos y método lookingat

partidos y métodos lookingat se utilizan para tratar de coincidir con una secuencia de patrón de entrada. Son diferentes de los requisitos de todo el partido secuencia de coincidencias, pero no lookingat necesarios.

Estos dos métodos se utilizan a menudo en comienza la cadena de entrada.

A través del siguiente ejemplo para explicar esta función:

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());
   }
}

Los ejemplos anteriores resultados compilados son los siguientes:

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

replaceFirst métodos y replaceAll

Método replaceFirst y replaceAll utiliza para sustituir el texto expresiones regulares. La diferencia está, replaceFirst sustituir el primer partido, replaceAll reemplazar todas las coincidencias.

En el siguiente ejemplo para explicar esta característica:

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);
   }
}

Los ejemplos anteriores resultados compilados son los siguientes:

The cat says meow. All cats say meow.

appendReplacement métodos y appendTail

clase Matcher también proporciona un método para appendTail appendReplacement y reemplazar texto:

Mira el siguiente ejemplo para explicar esta característica:

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());
   }
}

Los ejemplos anteriores resultados compilados son los siguientes:

-foo-foo-foo-

métodos de clase PatternSyntaxException

PatternSyntaxException es una clase de excepción no obligatoria, lo que indica un error de sintaxis regulares patrón de expresión.

PatternSyntaxException clase proporciona los siguientes métodos para ayudarnos a ver lo que ha ocurrido un error.

No. Método y Descripción
1 Public String getDescription ()
Obtener descripción del error.
2 public int getIndex ()
Obtener el índice incorrecto.
3 Cadena getPattern pública ()
Obtener el patrón de expresión regular errónea.
4 Cadena getMessage pública ()
Devuelve una cadena de múltiples líneas que contiene la descripción de un error de sintaxis y su índice, una indicación visual del patrón de expresión regular errónea, y el índice de error.