Exmpresions Regulares en Linux

De Manuais Informática - IES San Clemente.
Ir a la navegación Ir a la búsqueda

Unha expresión regular é un patrón que nos permite buscar un texto formado por metacaracteres e caracteres ordinarios.

Aquí tedes unha lista de metacaracteres que usamos en expresións regulares:

  • [ ] : Un calquera dos caracteres entre os corchetes. Exemplos:
- [aeiou] : Unha vocal minúscula.
- [A-Z0-9] : Unha letra maiúscula ou unha cifra.
  • [^ ] : Calquera carácter distinto dos que figuran entre corchetes. Exemplos:
- [^0-9] : Calquer carácter que non sexa unha cifra (unha letra, un símbolo, etc).
  • { } : Permítenos indicar o número de repeticións do patrón anterior que deben darse. Algúns exemplos:
  • [0-9]{5} : Representa un número de 5 díxitos.
  • [a-zA-Z]{2,4} : Representa unha palabra que ten entre dous e catro caracteres.

Máis metacaracteres:

  • * : Indica que o elemento que lle precede debe estar cero ou mais veces. Nótese que este carácter ten distinto significado que cando é carácter comodín. Por exemplo en ls ab*c móstranse os nomes de ficheiros que comezan por ab, teñen cero ou mais caracteres e rematan en c.
  • + : Indica unha ou mais repeticións do carácter anterior.
  • *?, +?, ?? : Os metacaracteres '*', '+', e '?' seleccionan todo o texto posible. É dicir, moitas veces non desexamos que devolva toda a frase onde existe esa coincidencia. Se temos o patrón <.*> e devolve
    <H1>title</H1>
    , pero nos queremos que devolva
    <H1>
    , temos que engadir o metacarácter ? xustamente despois, do seguinte xeito: <.*?>, así devolverá simplemente
    <H1>
    .
  • . : Concorda cun carácter.
  • $ : Se aparece ao final da expresión significa fin de liña.
  • ^ : Se aparece ao principio da expresión significa principio de liña.
  • | : Permítenos indicar caracteres alternativos.
  • ( ) : Permítenos agrupar patróns.
  • \ : Carácter de escape. Elimina ou dalle un significado especial ao carácter que lle segue. Vexamos os máis empregados:
- \< : Indica o comenzo dunha palabra.
- \> : Indica o final dunha palabra.
- \t : Representa un tabulador.
- \r : Representa o "retorno de carro" ou "regreso ao inicio", é dicir, o lugar onde a liña volve a iniciar.
- \n : Representa a "nova liña" o carácter por medio do cal unha liña da inicio. Recordade que en Windows é necesaria unha combinación de \r\n para comezar unha nova liña, mentres que en Unix só se emprega \n e en Mac_OS clásico utilízase só \r.
- \a : Representa unha "campana" ou "beep" que se produce ao imprimir este carácter.
- \e : Representa a tecla "Esc" ou "Escape".
- \f : Representa un salto de páxina.
- \v : Representa un tabulador vertical.
- \x : Emprégase para representar caracteres ASCII ou ANSI coñecendo o seu código. Por exemplo, se queremos buscar o símbolo de dereitos de autor é posible atopalo utilizando \xA9.
- \u : Emprégase para representar caracteres Unicode coñecendo o seu código. Por exemplo \u00A2 representa o símbolo de centavos.
- \d : Representa un díxito do 0 ao 9.
- \w : Representa cualquer carácter alfanumérico.
- \s : Representa un espazo en blanco.
- \D : Representa cualquer carácter que non sexa un díxito do 0 ao 9.
- \W : Representa cualquer carácter NON alfanumérico.
- \S : Representa cualquer carácter que NON sexa un espazo en branco.
- \A : Representa o inicio da cadea. Non un carácter senón unha posición.
- \Z : Representa o final da cadea. Non un carácter senón unha posición.
- \b : Marca o inicio e o final dunha palabra.
- \B : Marca a posición entre dous caracteres alfanuméricos ou dous non-alfanuméricos.

Outro método alternativo para especificar un rango de caracteres é o seguinte:

- [:alnum:] : Representa caracteres numéricos ou alfanuméricos. Equivalente a A-Za-z0-9.
- [:alpha:] : Representa caracteres alfanuméricos. Equivalente a A-Za-z.
- [:blank:] : Representa un "espazo" ou un "tab".
- [:cntrl:] : Representa caracteres de control.
- [:digit:] : Representa a un díxito. Equivalente a 0-9.
- [:graph:] : Significa graphic printable characters e representa caracteres no rango do ASCII 33 - 126. Isto é o mesmo que [:print:] pero sen contar o "espazo".
- [:lower:] : Representa aos caracteres alfabéticos en minúscula. Equivalente a a-z.
- [:print:] : Representa caracteres no rango ASCII 32 - 126. É equivalente a [:graph:] pero, ademais, tamén inclúe o "espazo".
- [:space:] : Representa caracteres en branco ("espazo" e "tab").
- [:upper:] : Representa aos caracteres alfabéticos en maiúsculas. Equivalente a A-Z.
- [:xdigit:] : Representa a díxitos hexadecimais. Equivalente a 0-9A-Fa-f.

Exemplos máis complexos de expresións regulares:

  • Buscar palabras nun texto: \b[a-zA-Z]+\b
  • A expresión regular (^|[?&])parametrox=[^&]+ significa que buscamos algo que:
^|[?&] __ O seguinte que aparece está a principio de liña (^) OU (|) que o buscado comeza por un carácter ? ou un &
parametrox= __ sería o principio do buscado ou o que segue aos caracteres antes vistos
[^&]+ __ e o buscado remata pour un ou máis caracteres (+)que non sexan & (^&)
  • Buscar dúas palabras cercanas nun párrafo, é dicir, que están separadas entre 1 e 8 palabras:
\bpalabra1\W+(\w+\W+){1,8}palabra2\b
\bpalabra1 __ Indica que se busca un comezo de palabra coa sucesión de caracteres palabra1
\W+ __ seguido por un ou varios caracteres non alfanuméricos \W
(\w+\W+){1,8} __ seguido de entre 1 e 8 grupos {1,8} de un ou máis caracteres alfanuméricos \w e un ou máis caracteres non alfanuméricos \W
palabra2\b __ acabado na sucesión de caracteres palabra2.

Está claro que, por suposto, pode ser que non importe que palabra1 vai antes que palabra2, así que podemos especificar que unha cousa ou | a outra:

\b(palabra1\W+(\w+\W+){1,8}palabra2|palabra2\W+(\w+\W+){1,8}palabra1)\b



Enlace interesante

Arquivos para exercicios: