Este artículo describe las funciones y el uso de la visualización envolvente regular y las backreferencias en Java. Compártelo para su referencia, como sigue:
Alrededor de la vista
1. Alrededor del concepto
Mirando a su alrededor, también conocida como afirmación de ancho cero, afirmación abreviada.
La vista envolvente enfatiza la posición (frontal o posterior), y la expresión de la vista envolvente debe coincidir para tener éxito.
La visualización envolvente puede considerarse como una condición de juicio adicional para la adición virtual a su ubicación y no consume caracteres regulares correspondientes.
2. Mirando alrededor de la expresión básica
(? = Expresión) El orden es positivo y la expresión puede coincidir en el lado derecho de la ubicación.
(?
(? <= Expresión) El orden inverso se ve positivamente a su alrededor, lo que indica que el lado izquierdo de la posición puede coincidir con la expresión
(? <
Nota: El lado derecho del orden (=) coincide y la vista envolvente de orden inverso tiene más <que la vista envolvente secuencial.
JavaScript solo admite la visualización de envoltura secuencial, pero no es compatible con la visualización envolvente inversa.
Aunque tanto la vista envolvente secuencial como la vista envolvente de orden inverso son compatibles con Java, la vista envolvente de orden inverso solo admite expresiones con una determinación de longitud. En la vista envolvente de orden inverso, ¿solo soportan los cuantificadores? y no admite otros cuantificadores con una longitud incierta.
3. Use ejemplos
3.1. Afirmación de secuencia y mirada alrededor (? = Expresión)
3.1.1. Haga coincidir el nombre del archivo sin sufijo con el final del sufijo ".txt"
【.+(? =/. Txt)】
texto:
txtfile.txt
exefile.exe
Inifile.ini
Resultado del partido: TXTFILE
3.1.2. Contraseña de coincidencia (debe contener letras (insensibles a la caja), números, 6-16 dígitos)
【^(? =.*? [A-Za-Z]) (? =.*? [0-9]) [A-ZA-Z0-9] {6,16} $】
(? =.*? [A-Za-Z]) define al menos una letra en los siguientes caracteres, usa (? =.*? [0-9]) para definir al menos un número en los siguientes caracteres, y finalmente define el cuantificador al igualar el regular [A-Z-Z0-9] {6,16}.
3.2. Negación de secuencia de la vista envolvente (?! Expresión)
3.2.1. Etiquetas de coincidencia distintas de <a> </a>
【<(?!/? A/B) [^<]+?>】
Texto: <a> <a1> </a> ZXIAOFAN <VIV> COM </d> IV> CC
Resultado del partido:
<a1>
<div>
</d>
3.2.2. Haga coincidir el nombre del archivo con el sufijo que no es ".txt" al final del sufijo
【.+ (? (So.+ puede igualar directamente txtfile.txt)
【(.+) (?!/. Txt)/. [^.]+$】
texto:
txtfile.txt
exefile.exe
Inifile.ini
Resultado del partido:
exefile.exe
Inifile.ini
3.3. Afirmación de orden inverso alrededor (? <= Expression)
3.3.1. Haga coincidir el contenido entre las etiquetas especificadas
【(? <= <Div>) [^<]+(? = </div>)】
Texto: <Div> Zxiaofan.com </div>
Resultado coincidente: zxiaofan.com
3.3.2. Obtener el valor del parámetro especificado
【(? <= Name =).+】
texto:
Nombre = ZXIAOFAN
Edad = 20
nivel = 6
Resultado del partido: Zxiaofan
3.4. Negación de orden inverso de la vista envolvente (? <! Expresión)
3.4.1. Obtener el valor de los parámetros no especificados
【^[^=#]+= (? <! Name =).+$】
texto:
Nombre = ZXIAOFAN
Edad = 20
nivel = 6
#Sex = 1
Resultado del partido:
Edad = 20
nivel = 6
4. Ejemplos completos
4.1. Debe contener letras, números y caracteres especiales
【^(? =.*? [A-Za-Z]) (? =.*?/D) (?! [A-Za-Z/D]+$).+$】
Explicación: ^(? =.*? [A-Za-Z]) Límite debe tener letras; (? =.*?/D) Límite debe tener números; (?
4.2. Haga coincidir el nombre de dominio principal (coincida con el nombre de dominio de nivel superior)
【(? <= (? :: /// w {0,50}/.)?) (?:/W {0,50}/.) (?: com/.cn | net/.cn | org/.cn | com | net | org | cn | biz | cc | tv)】)
texto:
vip.zxiaofan.com.cn
http://zxiaofan.com/123
www.zxiaofan.org.cn
Resultado del partido:
zxiaofan.com.cn
zxiaofan.com
zxiaofan.org.cn
Nota: [?:] No captures el texto coincidente para nombrar a grupos automáticamente, ni asignan grupos a este grupo. (No afectará el resultado después de la eliminación)
Nombre de dominio especial: wanwang www.net.cn
4.3. Coinciden 5 números de teléfono móvil consecutivos
【1 [34578]/D {3} (/d) (?!/1 {1}) (/d)/2 {4}】
texto:
18328501111
183285111111
18328551111
183281111111
Resultado del partido:
183285111111
Nota 1:/1 coincide con el primer conjunto de contenidos
Nota 2: (?!/1 {1}) Filtro 6 números consecutivos
Backreferencias
1. Concepto de referencia de backreferencia
Grupo de captura: dividir en varios grupos de acuerdo con la () subexpresión; Cada par de () aparece un grupo de captura; El motor numerará el grupo de captura, y la regla de numeración es el soporte izquierdo (el orden de ocurrencia de izquierda a derecha, a partir de 1.
Nombramiento del grupo de captura:
(? <name> exp) coincide con Exp y capture el texto en un grupo llamado Nombre, que también se puede escribir como (? 'Name'ExP);
(?: Exp) Match Exp, no captura el texto coincidente con el grupo nombrado automáticamente, ni asigna un número de grupo a este grupo.
Referencia de retroceso:
/1 significa el primer grupo (ABC); /2 significa el segundo grupo;
/k <word>: se refiere al grupo con el nombre especificado.
2. Use ejemplos
2.1. Haga coincidir el nombre del archivo con el mismo comienzo y finalización
【([AZ] {3}) [AZ]+/./1 {1}】
texto:
txtfile.txt
exefile.txt
fileini.ini
Resultado del partido:
txtfile.txt
Nota: ([AZ] {3}) es el primer grupo, y /1 {1} significa referirse al primer grupo una vez (no se puede escribir como /1 {3} aquí).
PD: Aquí hay dos herramientas de expresión regulares muy convenientes para su referencia:
JavaScript Herramienta de prueba en línea de expresión regular de JavaScript:
http://tools.vevb.com/regex/javascript
Herramienta de generación en línea de expresión regular:
http://tools.vevb.com/regex/create_reg
Para obtener más información sobre los algoritmos Java, los lectores interesados en este sitio pueden ver los temas: "Habilidades de expresión regular de Java", "Estructura de datos Java y tutorial de algoritmo de Java", "Habilidades de nodo DOM de Operación Java", "Archivo de Java y resumen de habilidades de operación de directorio" y "Sumación de habilidades de operación de cache de Java".
Espero que este artículo sea útil para la programación Java de todos.