У меня есть большой набор HTML-файлов, которые мне нужно проанализировать <? and ?>
<? and ?>
теги из, имея в виду <?xml
и тот факт, что открывающий <?php
не нуждается в конечном теге … EOF тоже подсчитывается.
Мне известно, что у моего знания регулярного выражения недостает: /<\?[^(\?>)]*\?>/
Пример HTML:
<? function trans($value) { // Make sure it does not translate the function call itself } ?> <!-- PHP code --> <div id='test' <?= $extraDiv ?>> <?= trans("hello"); ?> <? if ($something == 'hello'): ?> <? if ($something == 'hello'): ?> <p>Hello</p> <? endif; ?> <?php // Some multiline PHP stuff echo trans("You are \"great'"); // I threw some quotes in to toughen the test echo trans("Will it still work with two"); echo trans('and single quotes'); echo trans("multiline stuff "); echo trans("from array('test')",array('test')); $counter ++; ?> <p>Smart <?= $this->translation ?> time</p> <p>Smart <?=$translation ?> time</p> <p>Smart <?= $_POST['translation'] ?> time</p> </div> <? trans("This php tag has no end");
Hoped for Array:
[0] => "<? function trans($value) { // Make sure it does not translate the function call itself } ?>", [1] => "<?= $extraDiv ?>", [2] => etc...
Нет, это не то, как работают классы символов. К счастью, вам не нужно беспокоиться об этом, потому что мы можем использовать ?
чтобы сделать класс персонажа неживым. Я также добавлю s
в конец так, чтобы .
также может соответствовать символам новой строки, обычно это невозможно.
/<\?(.*?)\?>/s
Похоже, что вы ищете, это взгляд и взгляд. Эти операторы регулярных выражений в основном позволяют включать текст в поиск, но опустить его из окончательного результата.
Итак, сначала вы хотите изменить свое регулярное выражение так:
'/(?<=\<\?)[^(\?\>)]*(?=\?\>)/'
Для EOF вы должны использовать символ $. Следовательно:
'/(?<=\<\?)[^(\?\>)]*(?=\?\>|$)/'
Я не тестировал это, но я думаю, что он должен делать то, что вы ищете, или, по крайней мере, указать вам в правильном направлении.