|
Expresiones regulares: Cadenas
Sintaxis básica
Las cadenas de caracteres se pueden especificar utilizando comillas o apóstrofes como delimitadores.
Si la cadena está encerrada entre comillas ("), las variables que estén dentro de la cadena serán expandidas (sujetas a ciertas limitaciones de interpretación). Como en C y en Perl, el carácter de barra invertida ("\") se puede usar para especificar caracteres especiales.
A continuación vamos a explicar para que sirven algunos símbolos y de que manera se pueden utilizar para realizar búsquedas dentro de una cadena.
Los símbolos '^' y '$' indican el comienzo y el final de una cadena:
- "^La": Busca cualquier cadena que comience con "La".
- "la casa$": Busca cualquier cadena que termine con "la casa".
- "^abc$": Una cadena que comience y termine con "abc".
- "casa": Una cadena que contenga el texto "casa".
También están los símbolos '*', '+', y '?', que determinan la cantidad de caracteres o secuencia de caracteres que existen dentro de una cadena. Estos caracteres sugieren que existe cero o más caracteres, uno o más caracteres y cero o por lo menos un caracter. Ejemplo:
- "ab*": Busca una cadena que contenga una "a" seguida por cero o más "b" ("a", "ab", "abbb", etc.).
- "ab+": Igual que la anterior, pero debe existir por lo menos una "b" ("ab", "abbb", etc.).
- "ab?": Puede existir o no una "b".
- "a?b+$": Puede existir una "a" seguida por una o más "b" y que termine en "b".
También se puede determinar el rango de la búsqueda utilizando números dentro de llaves:
- "ab{2}": Busca una cadena que contenga una "a" seguida por, exactamente, dos "b".
- "ab{2,}": Existen por lo menos dos "b" ("abb", "abbbb", etc.).
- "ab{3,5}": Desde tres a cinco "b" ("abbb", "abbbb", or "abbbbb").
Nota: Es muy importante especificar el primer número dentro del rango (ej. "{0,2}", y no "{,2}"). También, como habrán notado, lo símbolos '*', '+', y '?' tienen el mismo efecto que si se utilizan los rangos "{0,}", "{1,}", y "{0,1}", respectivamente.
Ahora, para cuantificar una secuencia de caracteres, hay que colocarlos dentro de paréntesis:
- "a(bc)*": Busca una cadena que contenga una "a" seguida por cero o más copias de la secuencia "bc".
- "a(bc){1,5}": Entre una y cinco copias de la secuencia "bc".
También existe el símbolo '|', que tiene el mismo efecto que el operador OR:
- "si|no": Busca una cadena que contenga la palabra "si" o "no" dentro de ella.
- "(b|cd)ef": Una cadena que contenga una de las dos, "bef" o "cdef".
El punto '.' hace referencia a un solo caracter:
- "a.[0-9]": Busca una cadena que contenga una "a" seguida por un caracter y un número.
- "^.{3}$": Un cadena que contenga exactamente tres caracteres.
Las expresiones dentro de corchetes especifican los caracteres permitidos en una determinada posición de la cadena:
- "[ab]": Una cadena que contenga una "a" o "b" (igual que "a|b").
- "[a-d]": Una cadena que contenga caracteres desde la "a" hasta la "d" (igual que "a|b|c|d" o "[abcd]").
- "^[a-zA-Z]": Una cadena que comience con una letra.
- "[0-9]%": Una cadena que contenga un solo número antes del símbolo "%".
- ",[a-zA-Z0-9]$": Una cadena que termine en "," seguido por un caracter alfanumérico.
También se puede indicar los caracteres que NO se desean buscar, solo hay que utilizar el símbolo '^' como primer caracter en una expresión de corchetes (ej. "%[^a-zA-Z]%" Busca una cadena con una caracter que no sea una letra entre dos signos de porcentaje.
Como algunos caracteres tienen un significado especial, es necesario expandirlos (o sea, sujetarlos a ciertas limitaciones de interpretación). Por lo que la expresión "(\$|¥)[0-9]+" podría ser utilizada en una función de la siguiente manera: ereg("(\\$|¥)[0-9]+", $str). Y adivinen que símbolo será expandido dentro de esta expresión?
Autor: Dario Gomes / Traducción: Federico Cargnelutti
|