2010-06-17 13 views
8

Tengo una declaración de coincidencia previa, y comprueba si hay coincidencias, pero me preguntaba cómo se pueden contar las coincidencias. Cualquier consejo apreciado.preg match count matches

$message='[tag] [tag]'; 
preg_match('/\[tag]\b/i',$message); 

por ejemplo, un recuento de esta cadena de mensaje debería conducir a 2 partidos

Respuesta

20
$message='[tag] [tag]'; 
echo preg_match_all('/\\[tag\\](?>\\s|$)/i', $message, $matches); 

da 2. Tenga en cuenta que no puede usar \b porque el límite de palabras está antes del ], no después.

Ver preg_match_all.

+1

Sí, tenía razón, tengo que repasar mis habilidades de expresión regular. Gracias Arte, aprecia el ejemplo. – Scarface

+2

'\ b' * podría * utilizarse, simplemente afectaría lo que coincida (es decir, el' [tag] 'debería ir seguido de un carácter de palabra). – salathe

+1

gracias salathe apreciar la entrada – Scarface

5

preg_match ya se devuelve el número de veces que el patrón coincidente.

Sin embargo, esto solo será 0 o 1, ya que se detiene después de la primera coincidencia. Puede usar preg_match_all, ya que verificará la cadena completa y devolverá el número total de coincidencias.

3

Debe usar preg_match_all si desea hacer coincidir todas las ocurrencias. preg_match_all devuelve el número de coincidencias. preg_match devuelve solo 0 o 1, porque coincide solo una vez.

+0

gracias matej apreciarlo – Scarface

+0

De nada. –

3

Creo que necesita preg_match_all. Devuelve el número de coincidencias que encuentra. preg_match se detiene después de la primera.

+0

sí, eso es lo que los otros chicos recomendaron. Gracias Manos. – Scarface