我是为了用正则替换源码中的一些单词,但不能将字符串里的内容也替换了。举个例子,比如以下,如果要将$i=5替换成$j=8
<?php
if($i=5) echo '$i=5';
?>
替换成
<?php
if($j=8) echo '$i=5';
?>

解决方案 »

  1.   

    |[\$\w\.\+\-\*\/\%\d\>\[\]])*)?(?:\->(?:\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?))+)(?:\((?:(?:\w+|(?:(?:(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))|(?:\-?\d+(?:\.\d+)?))(?:\->(?:\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?)(?:\((?:(?:(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))|(?:\-?\d+(?:\.\d+)?))(?:\s*,\s*(?:(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))|(?:\-?\d+(?:\.\d+)?)))*)?\))?)*)(?:\s*,\s*(?:(?:\w+|(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))(?:(?:(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))|(?:\-?\d+(?:\.\d+)?))(?:\->(?:\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?)(?:\((?:(?:(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))|(?:\-?\d+(?:\.\d+)?))(?:\s*,\s*(?:(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))|(?:\-?\d+(?:\.\d+)?)))*)?\))?)*))))*)(?:\s*,\s*(?:\w+|(?:(?:(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))|(?:\-?\d+(?:\.\d+)?))(?:\->(?:\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?)(?:\((?:(?:(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))|(?:\-?\d+(?:\.\d+)?))(?:\s*,\s*(?:(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))|(?:\-?\d+(?:\.\d+)?)))*)?\))?)*)(?:\s*,\s*(?:(?:\w+|(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))(?:(?:(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))|(?:\-?\d+(?:\.\d+)?))(?:\->(?:\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?)(?:\((?:(?:(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))|(?:\-?\d+(?:\.\d+)?))(?:\s*,\s*(?:(?:(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'))|(?:\-?\d+(?:\.\d+)?)))*)?\))?)*))))*))*)?\))?(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?)|(?:\$(?:\w|[?])+(?:\[\$?[\w\.]+\])*(?:\.\$?(?:\w|[?])+(?:\[\$?[\w\.]+\])*)*(?:(?:[\+\*\/\%]|(?:-(?!>)))(?:(?:\-?\d+(?:\.\d+)?)|[\$\w\.\+\-\*\/\%\d\>\[\]])*)?|\#\w+\#|\%\w+\.\w+\%)|(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*')))*)*))
    (?:\s+(.*))?$~xs
      

  2.   

    smarty编译时用的就是正则,不过实在太长了……象上面的就是他一条正则的一小半,csdn做了长度限制,一个帖发不完smarty的一个正则……郁闷。
      

  3.   

    我看了一下,smarty的这条正则有十几k。谁要是看得懂10k长的正则的话……
      

  4.   

    preg_replace('/(?<!:\')\$i\=5(?!\')/isU','\$j=8',$str);
      

  5.   

    preg_replace('/(?<!\')\$i\=5(?!\')/isU','\$j=8',$str);
      

  6.   

    我已经把这个正则写出来了。zero你写的太简单啦^^b。我要的是通用。当
    if($i=5) echo "aafwf$i=5aoooo";
    你的就不行了,还是把字符串里的给替换了吧。我要的是内容无限制,只要在字符串里的就不能替换。