php - Regex para obtener solo caracteres sin espacio dentro de etiquetas especiales


Tengo 2 textos en una cadena:

%Juan%

%Juan González%

Y quiero poder obtener solo %Juan% y no el que tiene el Espacio, he estado probando varios Regexes sin suerte. Actualmente uso:

/%(.*)%/U 

pero obtiene ambas cosas, intenté agregar y jugar con [^\s] pero no funciona.

¿Alguna ayuda, por favor?



------------Respuesta------------

El problema es que. coincide con cualquier carácter excepto con una nueva línea. El modo no codicioso /U oSolo hace que .* sea perezoso y captura un texto desde el % hasta el primer % a la derecha del primer %.

Si sus cadenas contienen un par de %...%, puede usar

/%(\S+)%/

Vea la demostración de expresiones regulares

El patrón \S+ coincide con más de 1 carácter que no sea un espacio en blanco, y toda la clase de carácter negado [^\h%] que coincide con cualquier carácter excepto un espacio horizontal y el símbolo %.

Si tiene múltiples pares %...%, puede usar

/%([^\h%]+)%/

Vea otra demostración de expresiones regulares, donde \h mfija cualquier espacio en blanco horizontal.

Demostración de PHP:

$re = '/%([^\h%]+)%/'; 
$str = "%Juan%\n%Juan Gonzalez%"; 
preg_match_all($re, $str, $matches);
print_r($matches[1]);

Etiquetas: regex php

Artículos relacionados:

html - Buscando gmail en google.com - suceden cosas extrañas

java - Mybatis asigna varias columnas a la misma propiedad