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í.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *