00 09Java de expresiones regulares avanzadas

1 expresiones regulares comprensión

Puede ser encontrado a través de una serie de análisis antes, String es un muy versátil tipo que las operaciones de procesamiento de cadenas no sólo soporta una variedad de cadena, también es compatible con la conversión a cada función de tipo de datos, por lo que en el desarrollo del proyecto, siempre y cuando el usuario la información introducida por cadena básicamente expresado. Así que cuando se convierte a otros tipos de datos, con el fin de garantizar la exactitud de la conversión, a menudo tienen que haber algún proceso de validación compleja, entonces este caso, si simplemente se basan en el método de la clase String es muy molesto.

Ahora se supone que tiene una petición cadena de caracteres determina si la cadena de cifras, el número de dígitos si el número y entonces se convierte en multiplicación.
Ejemplo:

package cn.victor.demo;

import java.text.NumberFormat;
import java.text.ParseException;

public class DateDemo {

	public static void main(String[] args) throws ParseException {
		String str = "123";
		if(isNumber(str)) {
			long n = Integer.parseInt(str);
			System.out.println(n * 2);
		}
		
	}
	
	public static boolean isNumber(String str) {
		char[] chars = str.toCharArray();
		for(int i = 0; i < chars.length; i++) {
			if( chars[i] < '0' || chars[i] > '9' ) {
				return false;
			}
		}
		
		return true;
	}
}


Esta función de verificación es en realidad muy simple, pero esta función simple, una es que se necesita una gran cantidad de desarrolladores de código de lógica de la aplicación de escritura, a continuación, si se trata de una validación más complejo? Así pues, en este caso, para verificar términos de mejores prácticas es utilizar expresiones regulares para completar.
Ejemplo: utilizar expresiones regulares para lograr el mismo efecto

package cn.victor.demo;

import java.text.NumberFormat;
import java.text.ParseException;

public class DateDemo {

	public static void main(String[] args) throws ParseException {
		String str = "123";
		if(str.matches("\\d+")) {
			long n = Integer.parseInt(str);
			System.out.println(n * 2);
		}
		
	}
}


Las expresiones regulares, país de origen lenguaje Perl, que se desarrolló a continuación, en el JDK 1.4 en vez de si necesita usar las definiciones de expresiones regulares, es necesario introducir otro archivo jar solo, pero después de la JDK 1.4, regular de forma tácita sido el JDK apoyo, y se proporciona con el paquete de desarrollo java.util.regex, mientras específico para la clase String también hizo algunos cambios, por lo que hay maneras de apoyar directamente el proceso ordinario.

Usando la función de regular es mayor para facilitar el proceso de verificación, el proceso de modificación y para facilitar cadena compleja.

numerales 2 regulares comunes

Si se trata de llevar a cabo las operaciones de procesamiento regulares, a continuación, en primer lugar hay marcadores regulares de uso general han dominado, desde el inicio de JDK 1.4 proporciona paquete de desarrollo java.util.regex, este paquete que proporciona un patrón de clases, las clases en este programa la cual todos han apoyado la definición de marca regular.
(1) [Número: partido único personaje]
| - cualquier personaje: representado por los caracteres
| - \\: Partido "\";
| - \n: Partido de nueva línea;
| - \t: pestañas coincidentes;
(2) [ número:] conjunto de caracteres único (que puede ser opcionalmente de un carácter)
| -: [abc]indica la letra puede ser a, b, c es un carácter arbitrario;
| -: [\^abc]no a representa cualquier letra a, b, c es ;
| - [a-zA-Z]: está representado por una letra compuesta en todo caso-insensibles;
| - [0-9]: representado por un número.
(3) [Número: conjunto único carácter simplificado]
| - .: representa cualquier carácter;
| - \d: equivalente a la gama [0-9];
| - \D: equivalente a la gama [^0-9];
| - \s: coincida con cualquiera de un espacio, puede ser un espacio, avance de línea, las pestañas;
| - \S: se han encontrado datos no espaciales;
| - \w: cartas a juego, números, guiones, equivalente a [a-zA-Z_0-9];
| - \W: las letras no coincidencia, números, guiones bajos, equivalente a [^a-zA-Z_0-9];
(4) correspondiente límite
| - ^: frontera a juego comenzaron;
| - $: partido terminó límite;
(5) el número indicado por defecto sólo en añadir el número de unidades antes de que puede coincidir con el número de caracteres.
? | - expresión: la regularización puede ocurrir 0 o 1 veces.
| - * expresión: el positivo se puede producir cero, una o más veces;
| - + expresión: el positivo se puede producir una o más veces;
| -} {n-expresión: longitud de la expresión exactamente n veces;
:; | - expresión {n,} expresión longitud es al menos n veces
; longitud de la expresión de veces n ~ m: | - expresión {n, m}
expresión lógica (6) tipo: se puede conectar múltiples normal:
| - expresión expresión Y X: X expresión siguió después de la expresión Y.
| - expresión X | Y la expresión: No puede haber un reúnen expresión.
| - (expresión): en su conjunto es descrito como una configuración de expresión, se puede establecer el número de unidades para toda la descripción.

3 apoyo clase String para canónica

Realización proceso de expresión regular en la mayoría de los casos se realiza en base a la clase String, y se proporciona con el siguiente método operativo en el que la clase String:

No. nombre del método tipo descripción
01 partidas públicas booleanos (expresiones regulares String) ordinario determinación cadena regular especificada
02 Cadena replaceAll pública (expresión regular, la sustitución de cuerda) ordinario reemplazar todo
03 public String reemplazar (char oldChar, char Newchar) ordinario sustituir el primer
04 public String [] división (expresión regular) ordinario Dividir regular
05 public String [] división (expresión regular, limitar int) ordinario Dividir regular

Siguiendo algunos ejemplos específicos para conseguir en el uso regular se explicará.
Ejemplo: una implementación alternativa (delete no alfanumérico) cadena

package cn.victor.demo;

public class DateDemo {

	public static void main(String[] args) {
		String str = "328d$%$(fdf32(*&c34f34c24334gfg34c324c&crfgdsfg^%^$324csdsd##";
		String replstr = str.replaceAll("[^a-zA-Z0-9]", "");
		System.out.println(replstr);
		
	}
}


Ejemplo: una cadena para split (dividida por número)

package cn.victor.demo;

public class DateDemo {

	public static void main(String[] args) {
		String str = "328d$%$(fdf32(*&c34f34c24334gfg34c324c&crfgdsfg^%^$324csdsd##";
		String replstr[] = str.split("\\d+");
		for(int i = 0; i < replstr.length; i++) {
			System.out.println(replstr[i]);
		}
		
	}
}


Cuando un proceso regular para el funcionamiento de la sustitución de la división relativamente fácil, pero el problema era la sección de verificación de datos.
Ejemplo: la determinación de si los datos son un decimal, el decimal es entonces si se convierte en una doble

package cn.victor.demo;

public class DateDemo {

	public static void main(String[] args) {
		String str = "23";
		System.out.println(str.matches("\\d+(\\.\\d+)?"));
	}
}


Ejemplo: la determinación de si una cadena que consta de la fecha, si la fecha se compone de tipo Fecha luego se convierte a

package cn.victor.demo;

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class DateDemo {

	public static void main(String[] args) throws ParseException {
		String str = "1999-08-21";
		if(str.matches("\\d{4}-\\d{2}-\\d{2}"))
		{
			System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str));
		}
	}
}


Regular significado específico no puede ser determinado, sólo la determinación de procesamiento para el formato.
Ejemplo: determinar si un número de teléfono dado correcto?
(1) números telefónicos: \\d{7,8}51283346, ;
(2) el número de teléfono: (\\d{3,4})?\\d{7,8}01051283346, ;
(3) al teléfono: (010) ((\\d{3,4})|(\\(\\d{3,4}\\))-)?\\d{7,8}-51283346, .

package cn.victor.demo;

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class DateDemo {

	public static void main(String[] args) throws ParseException {
		String str = "(010)-5128331";
		System.out.println(str.matches("((\\d{3,4})|(\\(\\d{3,4}\\)))?-?\\d{7,8}"));
	}
}


Ahora que se puede utilizar para verificar de forma regular, a continuación, la siguiente se puede utilizar para implementar un formato de dirección de correo electrónico de verificación.
: Ejemplo Verificar formato de correo electrónico
(. 1) puede estar formado nombre de usuario de correo electrónico 字母, 数字, _compuesta;
dominio de correo electrónico (2) puede estar formada 字母, 数字, _, -compuesta;
sufijo (3) el nombre de dominio debe .cnser: .com, .net, .com.cn, .gov,;

package cn.victor.demo;

public class DateDemo {

	public static void main(String[] args) {
		String str = "[email protected]";
		System.out.println(str.matches("[^_]\\w+@[\\w-]+\\.(com|cn|com.cn|edu|gov)"));
	}
}


Ahora que varias funcionamiento regular de procesamiento que coincide es la forma más común de tratamiento son varias.

paquete de apoyo 4 java.util.regex

Aunque en la mayoría de los casos se puede utilizar la clase String para lograr un funcionamiento regular, pero hay algunos casos es necesario utilizar la clase de tratamiento paquete proporcionado normal desarrollo java.util.regex en este paquete que ha definido dos clases: Pattren (compilador de expresiones regulares), Matcher (partido).
1, patrón de clase
(1) Clase de patrón proporciona soporte para la compilación procesamiento de expresiones regulares: public static Pattern compile​(String regex);
(2) también está provisto de una operación de apoyo cadena dividida:public String[] split​(CharSequence input)

package cn.victor.demo;

import java.util.regex.Pattern;

public class DateDemo {

	public static void main(String[] args) {
		String str = "1s2s3s4";
		Pattern pat = Pattern.compile("s");
		String[] resultset = pat.split(str);
		for(int i = 0; i < resultset.length; i++) {
			System.out.println(resultset[i]);
		}
	}
}


2, clase Matcher que implementa las instancias de procesamiento de Regularización coincidentes de los objetos de esta clase se basa en la clase Pattern completado.
(1) Clase de Patrón método proporciona: public Matcher matcher​(CharSequence input)
Cuando la clase de objeto adquirida puede Matcher procede como sigue usando el método en esta clase:
(1) de ajuste de regular:public boolean matches()

package cn.victor.demo;

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

public class DateDemo {

	public static void main(String[] args) {
		String str = "123";
		Pattern pat = Pattern.compile("\\d+");
		Matcher mac = pat.matcher(str);
		System.out.println(mac.matches());
	}
}


(2) cadena de reemplazo:public String replaceAll​(String replacement)

package cn.victor.demo;

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

public class DateDemo {

	public static void main(String[] args) {
		String str = "1s2s3";
		Pattern pat = Pattern.compile("s");
		Matcher mac = pat.matcher(str);
		System.out.println(mac.replaceAll(""));
	}
}


Si se basa puramente en la división, reemplazar coincidir tres operaciones, por ejemplo, nunca utilizar el kit de desarrollo java.util.regex, basándose únicamente en la clase String se puede lograr. Sin embargo, se proporciona una clase Matcher función de agrupación, y la función de este paquete no está disponible en la cadena.

package cn.victor.demo;

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

public class DateDemo {

	public static void main(String[] args) {
		String str = "select * from table values(#{dept},#{no},#{name})";
		Pattern pat = Pattern.compile("#\\{\\w+\\}");
		Matcher mac = pat.matcher(str);
		while(mac.find()) {
			System.out.println(mac.group(0).replaceAll("\\W+", ""));
		}
	}
}


kit de desarrollo de java.util.regex, si no se lleva a cabo algunos de los tratamiento regular más compleja es difícil de usar, y la funcionalidad proporcionada por la clase String sólo es adecuado para el funcionamiento básico de regular.

Publicado 87 artículos originales · ganado elogios 11 · vistas 2989

Supongo que te gusta

Origin blog.csdn.net/weixin_43762330/article/details/104770176
Recomendado
Clasificación