$content="{php}se(2){/php}<br>{php}se(1);{/php}";
$re = "#{php}(.+[^;]){/php}#s";
echo preg_replace($re, "<?=$1?>", $content);

解决方案 »

  1.   

    不行啊。虽然上面的表达式是替代对了,但是对于这样复杂一点的式子
    $content="{php}se(2){/php}dsadsa;dsadsa{php}se(1);echo(dddd){/php}"
    替换的结果是
    <?=se(2){/php}dsadsa;dsadsa{php}se(1);echo(dddd)?>而期望得到的式子是
    <?=se(2)?>dsadsa;dsadsa{php}se(1);echo(dddd){/php}大家再帮帮忙想想办法
      

  2.   

    $pattern = "/{php}(\w+\(\d\)+;){\/php}/uim";
    $string = "{php}se(2){/php}<br>{php}se(1);{/php}";
    $replace = "<".chr(63)."=\\1?>";
    print preg_replace($pattern, $replace, $string);
      

  3.   

    $pattern = "/{php}(\w+\(\d\)+;.*){\/php}/uim";
    $string = "{php}se(2){/php}dsadsa;dsadsa{php}se(1);echo(dddd){/php}";
    $replace = "<".chr(63)."=\\1?>";
    print preg_replace($pattern, $replace, $string);
      

  4.   

    lantersen,反了,目的是替换{php}和{/php}之间没有分号;的表达式,而现在是替换有分号;的表达式。出来的结果是
    {php}se(2){/php}dsadsa;dsadsa<?=se(1);echo(dddd)?>
    而期望得到的式子是
    <?=se(2)?>dsadsa;dsadsa{php}se(1);echo(dddd){/php}
      

  5.   

    <?php
    $content="{php}se(2){/php}dsadsa;dsadsa{php}se(1);echo(dddd){/php}";$re = "#{php}([^;]+){/php}#sU";
    echo preg_replace($re, "<?=$1?>", $content);?>
      

  6.   

    完美解决,谢谢ice_berg16 和 lantersen !!!如果两位有好的关于学习正则表达式的资料请发送到十分感激 :)