regular regexper preg_match_all preg_match online matches expresion coincidencias cadena buscar all php regex string

php - regexper - ¿Cómo obtener la posición de un partido Regex en una cadena?



regex to preg_match (3)

Sé cómo usar preg_match y preg_match_all para encontrar las coincidencias reales de los patrones de expresiones regulares en una cadena dada, pero la función que estoy escribiendo no solo necesita el texto de las coincidencias, sino que también puede atravesar la cadena AROUND las coincidencias. .

Por lo tanto, necesito saber la posición de la coincidencia en la cadena, en base a un patrón de expresiones regulares.

Parece que no puedo encontrar una función similar a strpos () que permita expresiones regulares ... ¿alguna idea?


Con el uso de PREG_OFFSET_CAPTURE en preg_match () obtendrá el número de veces en las coincidencias en el patrón. Cuando haya una coincidencia, este tendrá el valor de compensación que comienza desde 0.

Usando este valor, puede llamar a preg_match nuevamente usando el parámetro offset.


Puedes usar la bandera PREG_OFFSET_CAPTURE para eso:

preg_match(''/(bar)/'', ''Foobar'', $matches, PREG_OFFSET_CAPTURE); var_export($matches);

El resultado es:

array ( 0 => array ( 0 => ''bar'', 1 => 3, // <-- the string offset of the match ), 1 => array ( 0 => ''bar'', 1 => 3, ), )


preg_match tiene un indicador opcional, PREG_OFFSET_CAPTURE , que registra la posición de la cadena de la PREG_OFFSET_CAPTURE de la coincidencia en el "pajar" original. Vea la sección ''banderas'': http://php.net/preg_match