谁帮我写一个正则。匹配源码中的字符串的。

Gdj 2006-08-02 03:26:13
//test.php
<?
$str1="abcd";
$str2="ab\"cd";
$str3="ab\'cd";
$str4="\\\r\n\\\\\\\\";
$str5="\$";
?>

$buf=file_get_contents("test.php");
希望从$buf中匹配出所有字符串。要考虑到字符串中的各种转义符。
...全文
163 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gdj 2006-08-03
  • 打赏
  • 举报
回复
我已经把这个正则写出来了。

zero你写的太简单啦^^b。我要的是通用。当
if($i=5) echo "aafwf$i=5aoooo";
你的就不行了,还是把字符串里的给替换了吧。我要的是内容无限制,只要在字符串里的就不能替换。
zeroleonhart 2006-08-02
  • 打赏
  • 举报
回复
preg_replace('/(?<!\')\$i\=5(?!\')/isU','\$j=8',$str);
zeroleonhart 2006-08-02
  • 打赏
  • 举报
回复
preg_replace('/(?<!:\')\$i\=5(?!\')/isU','\$j=8',$str);
颓废的老猫 2006-08-02
  • 打赏
  • 举报
回复
这么长的正则,恐怖!
Gdj 2006-08-02
  • 打赏
  • 举报
回复
我看了一下,smarty的这条正则有十几k。谁要是看得懂10k长的正则的话……
Gdj 2006-08-02
  • 打赏
  • 举报
回复
smarty编译时用的就是正则,不过实在太长了……

象上面的就是他一条正则的一小半,csdn做了长度限制,一个帖发不完smarty的一个正则……郁闷。
Gdj 2006-08-02
  • 打赏
  • 举报
回复
|[\$\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
Gdj 2006-08-02
  • 打赏
  • 举报
回复
可是如果我要做一个复杂替换的话,逐个字符比较自己写替换算法太痛苦了。
xuzuning 2006-08-02
  • 打赏
  • 举报
回复
不要用正则处理正则不能处理的事情
其实只要写个函数逐个字符判断读取就可以了。并且速度要高于使用正则
Gdj 2006-08-02
  • 打赏
  • 举报
回复
我是为了用正则替换源码中的一些单词,但不能将字符串里的内容也替换了。

举个例子,比如以下,如果要将$i=5替换成$j=8
<?php
if($i=5) echo '$i=5';
?>
替换成
<?php
if($j=8) echo '$i=5';
?>

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧