Algunas cosas sobre las expresiones regulares POSIX

Algunas cosas sobre las expresiones regulares POSIX

Computación en la nube Snowy Toad Jump 360

Declaración de heroína

Estos caracteres especiales se encuentran a menudo en la programación: *? + [] {} ^ $ () |, ¿Qué significado especial tienen? ¿Qué son los comodines, BRE, ERE y PCRE? Este artículo presenta los tres primeros.
PD: La tecnología de primera línea rica y las formas de expresión diversificadas están en la "charla de tecnología de primera línea de HULK", ¡preste atención!

Hay 3 preguntas a continuación. Si puede responderlas, entonces este artículo puede ser pan comido para usted, desperdiciando su precioso tiempo, así que solo puedo pedir perdón aquí. Si no sabe algo, debería saber algo sobre esto después de leer este artículo, puede intentar regresar y ver estas tres preguntas.

  1. ¿Qué es un comodín? ¿[AZ] representa los mismos caracteres en diferentes configuraciones regionales?
  2. ¿En qué circunstancias se utilizan los comodines y cuándo se utilizan las expresiones regulares?
  3. ¿Cuáles son los dos tipos de expresiones regulares POSIX? ¿Cuál es la diferencia entre ellos?

    Introducción

    Debido a que el shell utiliza con frecuencia nombres de archivo, el cuerpo del shell utiliza caracteres especiales para ayudar a especificar rápidamente un conjunto de nombres de archivo: comodines.


* 匹配任意多个字符
? 匹配任意一个字符
[characters] 匹配任意一个字符
[!characters] 匹配任意不是字符集中的字符
[[:class:]] 任意属于指定字符类中的字符

Primero introduzca los primeros cuatro:
(todos los archivos), g (archivos que comienzan con g), b * .txt (archivos txt que comienzan con b), Data ??? (archivos con una longitud de datos 7 al principio), [abc] ( Archivos que comienzan con aob o c), abc [0-9] [0-9] (archivos que comienzan con abc seguidos de dos números), [AZ] (esto se mostrará de manera diferente bajo diferentes configuraciones de idioma como resultado de)

Veamos algunos ejemplos: El siguiente ejemplo está bajo centos.
Algunas cosas sobre las expresiones regulares POSIX

Diferencia AZ

Vemos que el último de arriba no da el resultado que queremos.

Escuchémosnos lentamente. Cuando UNIX acaba de debutar, era solo en los Estados Unidos. Así que había 0-127 ASCII en ese momento. Su orden alfabético era ABC ... XYXabc ... xyz, pero con El lento desarrollo de UNIX comenzó a extenderse en países de habla no inglesa, por lo que los caracteres ASCII se expandieron, utilizando los 8 bits completos y agregando caracteres 128-255, de modo que se puedan acomodar más idiomas.

Para apoyar esta capacidad, el estándar POSIX introduce un concepto llamado locale, que se puede ajustar a los hábitos lingüísticos del propio país. Algunos países se ordenan según subcódigos, y su clasificación es aAbBcC ... xXyYzZ.

De esta manera, cuando se usa ls [AZ] *, todas las letras excepto a coinciden.

Echemos un vistazo a un ejemplo y modifiquemos la configuración regional para ver el resultado:

Algunas cosas sobre las expresiones regulares POSIX

Vimos el cambio anterior a LANG = "POSIX" antes de cambiar el idioma, y ​​luego cambiamos a otro, para que podamos ver la diferencia, intenté cambiar directamente y no funcionó. ¿Dónde se pueden utilizar los comodines? Los comandos Unix que pueden agregar nombres de archivos pueden usar comodines, ls, cat, less, more, vim, grep, sed, awk ...

Clase de personaje

Debido a que habrá diferentes interpretaciones según las diferentes configuraciones regionales, el estándar POSIX ha creado un conjunto de caracteres y especifica directamente los que se usan comúnmente.

[: alnum:] coincide con cualquier letra o número
[: alpha:] coincide con cualquier letra
[: dígito:] coincide con cualquier número
[: lower:] coincide con letras minúsculas
[: upper:] coincide con letras mayúsculas

Probémoslo:

Algunas cosas sobre las expresiones regulares POSIX

Encontré que esto es bueno, pero es un poco abrumador expresar el rango [AM].

Expresión regular POSIX

A menudo escuchamos que nuestro programa admite expresiones regulares POSIX BRE, y esto admite expresiones regulares POSIX ERE, así que hablemos de las expresiones regulares POSIX. Aquí hay solo una breve introducción a sus diferencias y uso específico. Lo que representa cada metacarácter no está elaborado.

POSIX Basic VS Expresión regular extendida

POSIX divide las expresiones regulares en expresiones regulares básicas (BRE) y expresiones regulares extendidas (ERE).

Entonces, ¿cuál es la diferencia entre ellos? De hecho, son bastante similares en el sentido de que admiten diferentes metacaracteres. BRE admite ^ $. [] * \, Y ERE admite estos () {}? + | Además de los anteriores.

Los programas de soporte de aplicaciones que admiten
BRE son {sed, grep ...} y los programas que admiten ERE son {egrep, grep -E, awk ...}

Ejercicio:
La siguiente es la expresión regular básica admitida por grep. Si encuentra una expresión regular extendida, puede usar {para representarla.

Algunas cosas sobre las expresiones regulares POSIX

Lo siguiente es egrep para lograr el mismo comando.

Algunas cosas sobre las expresiones regulares POSIX

Si necesita ver la diferencia entre ellos, puede verlo en un ejemplo.

Algunas cosas sobre las expresiones regulares POSIX
Algunas cosas sobre las expresiones regulares POSIX

El ejemplo anterior se puede entender de la siguiente manera:

La expresión regular básica {es la cadena "{", {es equivalente a {en la expresión regular extendida. En los siguientes ejemplos, vemos "No hay problema para el uso normal". Si no hay necesidad de agregar \ Agregar los lugares que debe agregarse producirá resultados impredecibles Los resultados del intento de cada persona pueden ser diferentes, así que después de recordar estos contenidos, asegúrese de escribir las expresiones regulares correctas, o no podrá entenderlas por un tiempo ¿Qué quiere decir?

Supongo que te gusta

Origin blog.51cto.com/15127564/2668361
Recomendado
Clasificación