Соответствие содержимого внутри тегов php с помощью регулярных выражений - PullRequest
1 голос
/ 10 сентября 2009

У меня проблемы с сопоставлением содержимого внутри тегов php.

В настоящее время у меня есть этот код, но он не работает для меня:

<?php preg_match_all('/<\?php(.+)\?>/', $str, $inside_php); ?>

Мне нужно получить содержимое, чтобы я мог делать с ними другие вещи, например, eval ().

Ответы [ 2 ]

4 голосов
/ 10 сентября 2009

Стоп, ты не хочешь делать это таким образом!

Вы можете использовать расширение токена в PHP , чтобы разбить строку на токены, что позволит надежно найти весь исходный код PHP. Затем вы можете сделать любое преобразование с токенами. Регулярные выражения не являются инструментом для этой работы (не хотите тушить огонь ложкой?)

$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;
    }
}
0 голосов
/ 10 сентября 2009

точка (или точка) не соответствует новым строкам:

([.\n\r]+)

сделай это ^^

<?php preg_match_all('/<\?php([.\n\r]+)\?>/', $str, $inside_php); ?>
...