Eliminando PHP short tags com regex

Escrevi uma regex para substituir short tags do PHP, a única coisa diferente da maioria que eu encontrei foi que me preocupei em manter as quebras de linhas - e não quebrar nenhuma parte do código comendo caracter (encontrei várias sugestões com regex que acabam "comendo" caracter dependendo do caso).

A expressão regular (regex):

<\?([^p|=])

O replace:

<?php $1


Explicando a REGEX:

Ela irá buscar por qualquer <? que não seja seguido imediatemente por um "p", garantindo que <?php não case com a regex, ou seguido por um "=" - garantindo que <?= não case com a regex.

Os parêntesis da REGEX criam um grupo de captura que é utilizado no replace, isto serve para casos específicos como

<?if(

O i seria "engolido" neste caso. O grupo de captura também captura quebras de linha, isso garante que:

<?
if($x = $y)

Se transforme em:

<?php
if($x = $y)
E não em:

<?php if($x = $y)
Mantendo a mesma legibilidade e formatação do código original após o replace.


Não encontrei nenhuma situação em que esta regex causou problema, se ela não funcionar em algum caso comente aí.


Ir para o topo