正则表达式的问题,重谢!

代码如下:

$value="http:www.domain1.com [IMG]http:www.domain2.com[/IMG] [URL=http://www.domain3.com]http:www.domain2.com[/URL]";

$str = eregi_replace("http://([a-zA-Z0-9.-:?=&\-]*)","[URL]\\0[/URL]",$value);

这种形式会得到结果如下:

[URL]http://www.domain1.com[/URL] [IMG][URL]http://www.domain2.com[/URL][IMG]

而我希望得到的结果是:

[URL]http://www.domain1.com[/URL] [IMG]http://www.domain2.com[IMG] [URL=http://www.domain3.com]http://www.domain3.com[/URL]";

domain2和domain3的不予转换。

请问eregi_replace()里的正则表达式要怎么样写才好?我试了很久都搞不好。

---------------------------------------------------------------

一种可能的写法:

 1   
 2$value="http://www.domain0.com[IMG]http://www.domain2.com[/IMG] [URL=http://www.domain3.com]http://www.domain3.com[/URL] http://www.domain1.com";   
 3  
 4// 提取将要排除的标记   
 5preg_match_all("/\\[(\w+).*\\].+\\[\/\\\1\\]/iU",$value,$regs);   
 6// 构造替换数组   
 7foreach($regs[0] as $k=>$v) {   
 8$p[$k] = " ¦".preg_quote($v)." ¦";   
 9$r[$k] = "`$k`";   
10}   
11// 替换掉要排除的标记   
12$value = preg_replace($p,$r,$value);   
13// 对余下的做替换   
14$value = preg_replace(" &brvbarhttp://([a-zA-Z0-9.-:?=&-]*) &brvbari","[URL]\\\0[/URL]",$value);   
15// 准备复原   
16foreach($regs[0] as $k=>$v) {   
17$p[$k] = "/$r[$k]/";   
18$r[$k] = $v;   
19}   
20// 恢复要排除的标记   
21$value = preg_replace($p,$r,$value);   
22  
23echo $value;   
Published At
Categories with Web编程
comments powered by Disqus