Expresión regular para contenidos dentro de y

Necesito encontrar una expresión regular para usar para encontrar el contenido y tags para usar en PHP. Yo he tratado…

preg_split("([^\"]*)", $table[0]); 

Pero eso me da el error de PHP …

 Warning: preg_split(): Unknown modifier '(' in C:\xampp\htdocs\..... 

¿Alguien puede decirme qué estoy haciendo mal?

Prueba esto:

 preg_match("/([^\"]*)< \/td>/", $table[0], $matches); 

Pero, como regla general, por favor , no intente analizar HTML con expresiones regulares … 🙂

Utilice preg_match lugar de preg_split

 preg_match("|([^< ]*)|", $table[0], $m); print_r($m); 

Tenga en cuenta que debe realizar un trabajo adicional para asegurarse de que * entre

y en su expresión regular no absorbe líneas enteras de

some text

. Eso es porque * es bastante codicioso.

Para desactivar la codicia de * , puedes poner un ? después de esto, esto dice que solo capta hasta la primera vez que alcanza lo que está después del * . Entonces, la expresión regular que estás buscando es algo así como:

 /(.*?)< \/td>/ 

Recuerde que, dado que la expresión regular comienza y termina con un / , debe tener cuidado con cualquier / que esté dentro de su expresión regular; deben escaparse. Por lo tanto, el \/ .

A partir de su expresión regular, parece que también está tratando de excluir cualquier " carácter que pueda estar entre un

y – ¿es correcto? Si ese fuera el caso, cambiaría la expresión regular para usar el seguimiento:

 /([^\"]*?)< \/td>/ 

Pero, suponiendo que no desee excluir el " carácter en sus coincidencias” , su código PHP podría verse así, usando preg_match_all lugar de preg_match .

 preg_match_all("/(.*?)< \/td>/", $str, $matches); print_r($matches); 

Lo que estás buscando está en $matches[1] .

Antes que nada, olvidaste ajustar la expresión regular con delimitadores. Además, no debe especificar la etiqueta td cierre en expresiones regulares.

Pruebe el siguiente código. Suponiendo que $table[0] contiene tags html entre

, , permite extraer cualquier contenido (incluido html) de las celdas de la tabla:

 $a_result = array_map( function($v) { return preg_replace('/< \/td\s*>/i', '', $v); }, array_slice(preg_split('/]*>/i', $table[0]), 1) );