В PHP, вы можете использовать это регулярное выражение:
'/^\s*<\?php(?:.(?!\?>\s*$))*$/s'
RegEx Demo
^\s*<\?php
Удачные факультативные пробельные и буквального <?php
в начале строки.
(?:.(?!\?>\s*$))*
будет соответствовать любым 0 или более символам, которые не заканчиваются ?>whitespace*
, используя отрицательный результат.
Update: Для повышения эффективности этого PCRE регулярное выражение будет работать быстрее, чем предыдущая:
'/^\s*<\?php(?>.*\?>\s*$(*SKIP)(*F)|.*+$)/s'
RegEx Demo 2
(*FAIL)
ведет себя как неисправного отрицательного утверждения и является синоним для (?!)
(*SKIP)
определяет точку, за которой движок регулярных выражений не допускаются, чтобы вернуться назад, когда подшаблон терпит неудачу позже
(*SKIP)(*FAIL)
вместе обеспечивает хорошую альтернативу ограничения, что вы не можете иметь переменную длину в назад 'выше регулярном выражении.
Если вы просто 'trim()' вначале, это становится намного проще и может быть выполнено с помощью простых вызовов 'str_pos' – adeneo
Невозможно в моем случае. Здесь я просто подготавливаю шаблоны, чтобы передать их другому сценарию. – autarq