2012-08-23 56 views
0

我需要将文章中的url转换为3g域。关于使用正则表达式将url转换为链接

例如,我需要转换

这里是链接:http://www.mydomain.com/index感谢

这里是链接:<a href='http://3g.mydomain.com$4' target='_self'>http://3g.$3.com$4</a> thanks

不转换其他域,只是mydomain。这里是代码:

$c = "/([^'\"=])?http:\/\/([^ ]+?)(mydomain)\.com([A-Za-z0-9&%\?=\/\-\._#]*)/"; 
$b=preg_replace($c, "$1<a href='http://3g.$3.com$4' target='_self'>http://3g.$3.com$4</a>",$b); 

它工作得很好,但如果这样的文字:

<a href="http://www.mydomain.com/44" target="_blank" class="blue">a link</a> 

它会返回错误的结果是这样的:

<a href="<a href='http://3g.mydomail.com/44' target='_self'>http://3g.mydomain.com/44</a>" target="_blank" class="blue">a link</a> 

但升需求

<a href="http://3g.mydomain.com/44" target="_blank" class="blue">a link</a> 

应该怎么做 我做?

回答

1

你应该做到以下几点:在HREF属性

  1. 地带目标从现有的超链接属性
  2. 重写超链接
  3. 重写任何其他超链接

    $纯=“HTTP:// ([^] +?)(mydomain)\。com(/?[^'\“\ s] *(?= ['\”\ s]))“;

    $ plain_replace =“http://3g.$3.com$4”;

    $ in_href =“href =(['\”])“+ plain +”(['\“])”;

    $ in_href_replace =“href ='http://3g.$3.com$4'target ='self'”;

    $ strip_target = “目标= ['\”] [^ '\“] * [' \ ”]“;

    ...

所以:

  1. 替换$ strip_target与 “”

  2. 与$ in_href_replace

  3. 替换$ in_href与$ plain_replace替换$纯

(正则表达式是经过测试可以在C#中工作,您可能需要调整\ escapes以适应php的正则表达式规则。)

0

摆脱正则表达式中的第一个?。这允许缺少前面的字符。

或者,也许更多的你的意图,如果你想允许开头的网址,可以更换:

([^'\"=])? 

有:

(^|[^'\"=]) 

...这将允许链接如果在一开始,或者如果没有在报价之前等,但不是以其他方式。