Hoje vou falar de formatação de textos, respeitando os blocos de código php.
Script muito útil para quem precisa escrever artigos (como os artigos aqui da Revista PHP), pois formata os blocos de código em separado e com a sintaxe colorida.
Para quem não conhece nada sobre expressões regulares, seria interessante dar uma lida nestes links:
http://www.php.net/manual/pt_BR/ref.pcre.php
http://www.php.net/manual/pt_BR/ref.regex.php
Meu arquivo: formatacodigo.php
<?php
// temos uma variável chamada $bloco, que servirá de referência para o regexp (expressão regular)
// os exemplos abaixo, apresentarão ao usuário, os blocos de código PHP,
// formatados em formato código, sem imterpretá-los.
$bloco =" //Primeiro exemplo:
<?
echo 'este é um exemplo de código';
?>
//Segundo exemplo:
<?
phpinfo();
?>
//Terceiro exemplo:
<?
\$data = date('Y-m-d');
echo \$data;
?>
//Quarto exemplo
<?
\$soma1 = '12';
\$soma2 = '36';
\$echo '\$soma1+\$soma2';
?> "; // as " (aspas duplas) acima, indicam o fechamento do bloco html que apresenta os códigos php
// sem interpretação
// importante: note que antes de cada variável, é necessário uma \ invertida.
// você pode adaptar isso, criando uma simples função para colocar a barra antes das variáveis
// caso você vá usar este código em formulários de cadastro de scripts, etc.
// o que faz o preg_replace?
// é uma expressão regular, para interpretar o que vem entre as tags do php, e entre as tags html.
// você pode adaptá-la à sua necessidade, seguindo os princípios básicos da lógica de programação.
// consulte também o manual do php, sobre está função. $bloco = preg_replace("/(.?)(<html>.?<\?.*?\?>.*?<\/html>|<\?.*?\?>)(.?)/imse","'\\1<br/> <table bgcolor=\"#E0E0E0\"><tr><td><code>'.highlight_string('\\2', TRUE).'</code></td></tr></table> <br/>\\3'",$bloco); // apresento o texto, respeitando os blocos de código php, devidamente destacados
// e coloridos.
echo $bloco;
?>
Estou usando aqui, uma expressão regular compatível com PERL, (vide o primeiro link, que informei no começo do artigo). A função preg_replace no script acima, nada mais faz, do que interpretar o que está entre as tags indicadas, como texto, ou como html.
E quem faz o código php ficar colorido?
Note aqui:
<?php
$bloco = preg_replace("/(.?)(<html>.?<\?.*?\?>.*?<\/html>|<\?.*?\?>)(.?)/imse","'\\1<br/> <table bgcolor=\"#E0E0E0\"><tr><td><code>'.highlight_string('\\2', TRUE).'</code></td></tr></table> <br/>\\3'",$bloco);
?>
A função highlight_string (http://www.php.net/manual/pt_BR/function.highlight-string.php) destaca o texto especificado (no caso o que está dentro da variável $bloco), e o TRUE, indica que o texto deve retornar como sintaxe destacada, ao invés de mostrá-lo interpretado.
Não deixe de dar uma passada sempre pelo manual do php, afinal de contas, tudo o que você precisa, está lá. :)
Para ver o script em funcionamento, clique aqui: http://www.flaviajobs.com.br/sistemas/revistaphp/formatacodigo.php