我需要将文章中的网址转换为3g域名。
例如,我需要转换
这里是链接: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>
我该怎么办?
答案 0 :(得分:1)
您应该执行以下操作:
重写任何其他超链接
$ plain =“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 =“target = ['\”] [^'\“] * ['\”]“;
...
所以:
将$ strip_target替换为“”
将$ in_href替换为$ in_href_replace
将$ plain替换为$ plain_replace
(正在使用C#对正则表达式进行测试,您可能需要调整\ escaping以适应php正则表达式规则。)
答案 1 :(得分:0)
摆脱正则表达式中的第一个?
。这允许缺少前面的字符。
或者,或许更符合您的意图,如果您想在开头允许网址,则可以替换:
([^'\"=])?
使用:
(^|[^'\"=])
...如果在开始时允许链接,或者如果之前没有引号等,则允许链接,但不允许。