Expresión regular

Regular

Metacaracteres

Metacaracteres:.^$+?{}[]|()\

.   通配符(除\n的任何字符)
\d  数字
\s  空白字符
\w  字母或数字或下划线或汉字
\b  特殊字符边界(匹配单词边界,不匹配任何字符。要防止转义字符串前面加r)
^   开始
$   结束

Personaje escapando

\ Utilizado para escapar de la coincidencia de metacaracteres \ Necesidad de usar \

Clase de personaje

Rango de caracteres

[] 从字符集里匹配一个 可以使用a-z a,z表示范围 [.?!] 匹配标点符号(.或?或!)

Ejemplos:

[\u4E00-\u9FA5] 匹配汉字

Partido duplicado


*   0~无穷(可以按照0*True,结果为0)尽可能多的匹配
+   1~无穷(可以按照0+True,结果为True)
?   出现0~1次(取最少)非贪婪匹配

{n,m}   n-m次
{n,}    多于n次
{0,}==*        {0,1}==?   {1,}==+

Ejemplo:
regularización del número de teléfono móvil:

^1[3|5|8]\d{9}$

Codicia y pereza

Cuando la expresión regular contiene calificadores que pueden aceptar la repetición, el comportamiento habitual es (en la premisa de que la expresión completa puede coincidir) para que coincida con la mayor cantidad de caracteres posible. Tome esta expresión como ejemplo: a. * B, coincidirá con la cadena más larga que comienza con a y termina con b. Si lo usa para buscar aabab, coincidirá con la cadena completa aabab. Esto se llama correspondencia codiciosa.

A veces, necesitamos una coincidencia perezosa, es decir, unir la menor cantidad de caracteres posible. Los calificadores dados anteriormente se pueden convertir al modo de coincidencia diferida, siempre que esté seguido de un signo de interrogación. Esto .*?significa hacer coincidir cualquier número de repeticiones, pero usar la menor cantidad de repeticiones bajo la premisa de hacer que todo el partido sea exitoso. Ahora mire el ejemplo de la versión perezosa: A * b coincide con la cadena más corta que comienza con ay termina con b. Si lo aplica a abab, coincidirá con aab (primer a tercer carácter) y ab (cuarto a quinto carácter).

¿Por qué la primera coincidencia es aab (del primer al tercer carácter) en lugar de b (del segundo al tercer carácter)? En pocas palabras, dado que las expresiones regulares tienen otra regla, tienen una prioridad más alta que las reglas perezosas / codiciosas: la partida que comienza primero tiene la prioridad más alta: la partida que comienza más temprano gana.

Coincidencia codiciosa predeterminada (coincidencia de atrás hacia adelante)

¿No es codicioso (de adelante hacia atrás) agregado después de la codicia?

| Condición de rama (o coincidencia)

\d{5}-\d{4}|\d{5}Esta expresión se usa para hacer coincidir los códigos postales de EE. UU. Las reglas del código postal de EE. UU. Son 5 dígitos, o 9 dígitos separados por guiones. La razón por la que se da este ejemplo es porque puede ilustrar un problema: cuando use condiciones de ramificación, preste atención al orden de cada condición. Si lo cambia a \d{5}|\d{5}-\d{4}, solo coincidirá con el código postal (y los primeros 5 de los 9 códigos postales). La razón es que cuando se coinciden las condiciones de la rama, cada condición se probará de izquierda a derecha. Si se cumple una determinada rama, no se ignorarán otras condiciones.

() Grupo

(\d{1,3}.){3}\d{1,3}Es una expresión simple que coincide con la dirección. Para comprender esta expresión, analícela en el siguiente orden: \d{1,3}haga coincidir 1 a 3 dígitos, haga (\d{1,3}.){3}coincidir 3 dígitos más un punto en inglés, todo es el grupo) repita 3 veces y finalmente agregue uno a tres dígitos Número de(\d{1,3})

Después de especificar una subexpresión usando paréntesis, el texto que coincide con la subexpresión (es decir, el contenido capturado por este grupo) puede procesarse más en la expresión u otros programas. Por defecto, cada grupo tendrá automáticamente un número de grupo, la regla es: de izquierda a derecha, con el paréntesis izquierdo del grupo como signo, el número de grupo del primer grupo aparece como 1 y el segundo grupo como 2. Por analogía

Desafortunadamente, también coincidirá con la dirección imposible | P de 256.300888999. Si puede usar la comparación aritmética, es posible que pueda resolver este problema de manera simple, pero las expresiones regulares no proporcionan ninguna función sobre las matemáticas, por lo que solo puede usar largas clases de agrupación, selección y caracteres para describir una dirección | P correcta:(2[0-4]\d|25[0-5]|[01]?\d\d?\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

var s='JavaScript and Java'
var p=/\bJava(\w+)\b/
p.exec(s)[0]    //结果为:"JavaScript"
p.exec(s)[1]    //结果为:"Script"

Antisentido

A veces necesita encontrar caracteres que no pertenecen a una clase de caracteres que se pueden definir simplemente. Por ejemplo, si desea encontrar cualquier carácter que no sean números, debe usar antisentido.

Códigos antisentido comunes:

Código / Sintaxis Explicación
\ W Subrayado no alfanumérico Caracteres chinos
\ S Caracteres que no son espacios en blanco
\RE Caracteres no numéricos
\SI Inicio o final sin palabras
[^ x] Cualquier personaje que no sea x
[^ aeiou] Cualquier personaje que no sea aeiou

Ejemplos:

\S+ 匹配不包含空白字符的字符串
<a[^>]+>    匹配尖括号包起来的a开头的字符串

Partidos que no se consiguen:

\w(?=pattern)  正向肯定匹配
(?<=pattern)\w  逆向肯定匹配
\w(?!pattern)  正向否定匹配
(?!pattern)\w  反向否定匹配

Referencia posterior

\b(\w+)\b\s+\1\b  \ 1 indica que el contenido del primer grupo se usa para unir palabras adyacentes repetidas: ir ir

También puede especificar el nombre del grupo de la subexpresión usted mismo. Para especificar el nombre del grupo de una subexpresión, use esta sintaxis: (?<Word>\w+)O reemplace los corchetes angulares con ': (?' Word '\ w +), de modo que el nombre del grupo \ w + se especifique como Word. Para invertir esta captura paquete de referencia, se puede utilizar \k<Word>, por lo que el ejemplo anterior también se puede escribir así: (?<Word>\w+)\b\s+\k<Word>\b.

Todavía hay muchos usos de paréntesis prácticos. Enumere los que se usan comúnmente:

Clasificación Código / Sintaxis Explicación
Capturar (exp) Haga coincidir exp y capture texto en grupos nombrados automáticamente
Capturar (?<name>exp) Hacer coincidir la exp, y capturar el texto en el nombre del grupo, también se puede escribir como(?'name'exp)
Capturar (?:exp) Hacer coincidir exp, no capturar texto, no asignar grupos
Afirmación de ancho cero (?=exp) Coincide con la posición delante de exp
Afirmación de ancho cero (?<=exp) Coincide con la posición después de exp
Afirmación de ancho cero (?!exp) Posiciones del partido que no son seguidas por exp
Afirmación de ancho cero (?<!exp) Posiciones del partido no delante de exp
Comentario (?#comment) Esta agrupación no tiene ningún efecto en las expresiones regulares, proporcionando comentarios para la lectura humana.

Afirmación de ancho cero

Los siguientes cuatro se usan para buscar cosas antes o después de ciertos contenidos (pero sin incluirlos), es decir, se usan para especificar una posición como b, ^, $, y esta posición debe cumplir ciertas condiciones Es decir, aserciones), por lo que también se llaman aserciones de ancho cero . Es mejor ilustrarlo con un ejemplo:

Las afirmaciones se utilizan para declarar un hecho que debería ser cierto. La expresión regular solo seguirá coincidiendo si la afirmación es verdadera.

(?=exp)También conocida como afirmación de precedencia de predicción positiva de ancho cero , afirma que la posición donde aparece puede coincidir con la expresión exp. Por ejemplo \b\w+(?=ing\b), si coincide con la parte frontal de una palabra que termina en ing (que no sea ing), como cuando busco que estoy cantando mientras baila, coincidirá con sing y danc.

(?<=exp)También llamada revisión positiva de ancho cero después de la afirmación , afirma que la posición frente a su aparición puede coincidir con la expresión exp.

Por ejemplo, (?<=\bre)\w+\bcoincidirá con la segunda mitad de las palabras que comienzan con re excepto por re). Por ejemplo, cuando busca un libro, coincide con la lectura. Si desea agregar una coma entre cada tres dígitos en un número largo (por supuesto Se agrega desde la derecha), puede encontrar la parte que necesita agregar comas al frente y al interior de esta manera: ((?<=\d)\d{3})+\bcuando la usa para buscar 1234567890, el resultado es 234567890.

El siguiente ejemplo utiliza ambas afirmaciones: (?<=\s)\d+(?=\s)los números coincidentes separados por espacios en blanco se enfatizan nuevamente, excluyendo estos espacios en blanco)

Aserción inversa de ancho cero

\b\w*q[^u]\w*\bUne las palabras que contienen la letra q que no es la letra u . Pero si realiza más pruebas (o si es lo suficientemente agudo para observar directamente), encontrará que si q aparece al final de la palabra, como iraq, Benq, esta expresión será incorrecta. Esto se debe a que [^u]siempre hay un carácter que coincide, por lo que si q es el último carácter de una palabra, lo siguiente [^u]coincidirá con el separador de palabras después de q (puede ser un espacio, un punto o algo), y lo siguiente \w*\bcoincidirá La siguiente palabra, para que \b\w*q[^u]\w*\bpueda coincidir con toda la lucha contra Irak. Una afirmación de ancho cero en dirección negativa puede resolver este problema porque solo coincide con una posición y no consume ningún carácter. Ahora, podemos hacer para solucionar este problema: \b\w*q(?!u)\w*\b.

La predicción negativa de ancho cero primero afirma (?! Exp) que la expresión exp no puede coincidir después de esta posición. Por ejemplo: \d{3}(?!\d)coincide con tres dígitos, y estos tres dígitos no pueden ser seguidos por dígitos; \b((?!abc)\w)+\bcoincide con palabras que no contienen cadena consecutiva abc.

De manera similar, podemos usar (? <! Exp), una revisión negativa de ancho cero y emitir una afirmación para afirmar que el frente de esta posición no puede coincidir con la expresión para que exp:(?<![a-z])\d{7}coincida con los siete dígitos que no están en minúsculas.

Analice la expresión en detalle (?<=<(\W+)>).*(?=<\/\1>), esta expresión puede mostrar mejor el verdadero uso de las aserciones de ancho cero.

Un ejemplo más complicado: (?<=<(\W+)>).*(?=<\/\1>)emparejar contenido dentro de etiquetas HTML simples que no contienen atributos. Se (?<=<(w+)>)especifica dicho prefijo : palabras entre corchetes angulares (que pueden ser, por ejemplo ), luego. * (Cualquier cadena) y finalmente un sufijo (? = </ \ 1>). Tenga en cuenta el / en el sufijo, que utiliza el carácter de escape mencionado anteriormente; \ es una referencia inversa, que se refiere al primer grupo capturado y las coincidencias anteriores (W +), por lo que si el prefijo es entonces el sufijo es el. Toda la expresión se corresponde y contenido entre (Una vez más, no incluyen el prefijo y el sufijo sí mismo)

Otro uso de paréntesis es incluir comentarios a través de la sintaxis (? #Comment). Por 2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)ejemplo: .

Probador de expresiones regulares

Supongo que te gusta

Origin www.cnblogs.com/Neroi/p/12716876.html
Recomendado
Clasificación