Coincidencia de contenidos dentro de las etiquetas php usando expresiones regulares
Pregunta
Tengo algunos problemas para hacer coincidir el contenido dentro de las etiquetas php.
Actualmente tengo este código, pero no funciona para mí:
<?php preg_match_all('/<\?php(.+)\?>/', $str, $inside_php); ?>
Necesito recuperar el contenido para poder hacer otras cosas con ellos, como eval ().
Solución
Detente allí mismo, ¡no quieres hacerlo de esta manera!
Puede utilizar la extensión de tokenizer de PHP para rompa una cadena en tokens, que encontrarán de manera confiable todo el código fuente de PHP. Entonces puedes hacer cualquier transformación que quieras con los tokens. Las expresiones regulares no son la herramienta para este trabajo (no quieres apagar el fuego con una cuchara, ¿verdad?)
$tokens = token_get_all($string);
foreach ($tokens as $token) {
if (is_array($token)) {
if (!in_array($token[0], array(T_INLINE_HTML, T_OPEN_TAG, T_CLOSE_TAG))) {
echo $token[1];
}
} else {
echo $token;
}
}
Otros consejos
un punto (o punto) no coincide con las nuevas líneas:
([.\n\r]+)
haz eso ^^
<?php preg_match_all('/<\?php([.\n\r]+)\?>/', $str, $inside_php); ?>