Grupos de caracteres en expresiones regulares de PHP
Existen comandos especiales que permiten
seleccionar grupos enteros de caracteres a la vez. El comando
\d significa un dígito del 0 al 9.
El comando \w denota un dígito, una letra latina
o el signo de subrayado. El comando \s
denota un espacio o un carácter de espacio:
espacio, salto de línea, tabulación. Se puede
invertir el valor del comando escribiendo una letra mayúscula:
por ejemplo, si \d es un dígito,
entonces \D es un no-dígito.
Ejemplo
Encontremos todos los dígitos:
<?php
$str = '1 12 123';
$res = preg_replace('#\d#', '!', $str);
?>
Como resultado, se guardará lo siguiente en la variable:
'! !! !!!'
Ejemplo
Los operadores de repetición consideran a los comandos-grupos
como un todo, es decir, los paréntesis de agrupación
no son necesarios. En el siguiente ejemplo, el patrón de búsqueda
se ve así: dígito del 0 al 9
una o más veces:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\d+#', '!', $str);
?>
Como resultado, se guardará lo siguiente en la variable:
'! ! ! abc @@@'
Ejemplo
En el siguiente ejemplo, el patrón de búsqueda se ve
así: cualquier cosa una o más veces,
pero no un dígito del 0 al 9:
<?php
$str = '123abc3@@';
$res = preg_replace('#\D+#', '!', $str);
?>
Como resultado, se guardará lo siguiente en la variable:
'123!3!'
Ejemplo
En este ejemplo, el patrón de búsqueda se ve así: carácter de espacio una vez:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
Como resultado, se guardará lo siguiente en la variable:
'1!12!123!abc!@@@'
Ejemplo
En este ejemplo, el patrón de búsqueda se ve así:
carácter NO espacio una o más veces.
Todas las subcadenas, separadas por espacios, se reemplazarán
por '!':
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\S+#', '!', $str);
?>
Como resultado, se guardará lo siguiente en la variable:
'! ! ! ! !'
Ejemplo
En este ejemplo, el patrón de búsqueda se ve así:
dígito o letra una o más veces.
Todas las subcadenas, que consisten en dígitos y letras,
se reemplazarán por '!':
<?php
$str = '1 12 123a Abc @@@';
$res = preg_replace('#\w+#', '!', $str);
?>
Como resultado, se guardará lo siguiente en la variable:
'! ! ! ! @@@'
Ejemplo
En este ejemplo, el patrón de búsqueda se ve así:
NO dígito y NO letra una o más veces.
Según esta definición, en nuestro caso coincide
'@@@' y todos los espacios (ya que ellos también
no son dígitos ni letras). Presta atención a
que al final hay un '!' - en él se
transformó la cadena ' @@@' - con
un espacio al frente:
$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);
Como resultado, se guardará lo siguiente en la variable:
'1!12!123!Abc!'
Problemas prácticos
Dada la cadena:
<?php
$str = 'a1a a2a a3a a4a a5a aba aca';
?>
Escribe una expresión regular que encuentre las cadenas
en las que en los bordes hay letras 'a',
y entre ellas un dígito.
Dada la cadena:
<?php
$str = 'a1a a22a a333a a4444a a55555a aba aca';
?>
Escribe una expresión regular que encuentre las cadenas
en las que en los bordes hay letras 'a',
y entre ellas cualquier cantidad de dígitos.
Dada la cadena:
<?php
$str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>
Escribe una expresión regular que encuentre las cadenas
en las que en los bordes hay letras 'a',
y entre ellas cualquier cantidad de dígitos (incluyendo
cero dígitos, es decir, la cadena 'aa').
Dada la cadena:
<?php
$str = 'avb a1b a2b a3b a4b a5b abb acb';
?>
Escribe una expresión regular que encuentre cadenas
del siguiente tipo: en los bordes hay letras
'a' y 'b', y entre ellas - no
un número.
Dada la cadena:
<?php
$str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>
Escribe una expresión regular que encuentre cadenas
del siguiente tipo: en los bordes hay letras
'a' y 'b', y entre ellas - no
una letra y no un dígito.
Dada la cadena:
<?php
$str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>
Escribe una expresión regular que reemplace todos los espacios
por '!'.