2010-09-18 15 views

Respuesta

2

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.

+0

Un límite de palabra también coincidencia (por ejemplo) 'AA; BB; CC', que pueden ser falsos positivos. – Matthew

0

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); 
Cuestiones relacionadas