preg_match_all('/[\s]{1}(AA|BB|CC)+[\s]{1}/',' AA BB ',$matches);
resultado es AA
, pero necesito AA
y BB
.PHP: preg_match expresiones regulares no encontrar cadenas correctas
preg_match_all('/[\s]{1}(AA|BB|CC)+[\s]{1}/',' AA BB ',$matches);
resultado es AA
, pero necesito AA
y BB
.PHP: preg_match expresiones regulares no encontrar cadenas correctas
Las secuencias [\s]{1}
* que está utilizando para que coincida con la superposición espacios en blanco entre los partidos. El espacio posterior después de "AA "
es el mismo espacio que el anterior a " BB"
. Cualquier carácter solo puede coincidir una sola vez, por lo que después de que el escaneo encuentre " AA "
, solo busca la cadena "BB "
restante para encontrar una coincidencia y no encuentra una.
Pruebe la secuencia de escape de límite de palabras \b
en su lugar. Esto coincide con el principio y el final de las palabras pero en realidad no consumir ningún carácter, lo que puede coincidir varias veces:
preg_match_all('/\b(AA|BB|CC)+\b/', 'AA BB', $matches);
Usando \b
tiene el efecto adicional de no requerir los espacios en blanco que tenía que rodea a su cadena. Puede pasar 'AA BB'
en lugar de ' AA BB '
si lo desea.
* Por cierto, [\s]{1}
es lo mismo que [\s]
, lo que es lo mismo que un simple \s
. No hay necesidad de los corchetes cuadrados o rizados.
El problema es que está tratando de hacer coincidir el mismo espacio dos veces. Usando una mirada hacia el futuro (? = \ S) debería ayudar:
preg_match_all('/\s(AA|BB|CC)(?=\s)/',' AA BB CC BB AA ',$matches);
Usted puede hacer una mirada detrás positivo:
/(?<=\s)(AA|BB|CC)+\s/
Recursos:
Un límite de palabra también coincidencia (por ejemplo) 'AA; BB; CC', que pueden ser falsos positivos. – Matthew