我试图在PHP中创建一个正则表达式,从html页面(我无法控制)中捕获链接及其内容,并将其替换为我的链接。
即:
<a style="position:absolute;more_styles:more;" href="http://www.google.co.il/" class="something">This is the content</a>
变为:
<a style="position:absolute;more_styles:more;" href="my_function('http://www.google.co.il/')" class="something">This is the content</a>
这是我写的正则表达式:
$content = preg_replace('|<a(.*?)href=[\"\'](.*?)[\"\'][^>]*>(.*?)</a>|i','$3',$content);
这适用于除以下链接之外的所有链接:
<a href="http://google.co.il" onclick="if(MSIE_VER()>=4){this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.google.co.il')}" class='brightgrey rightbar' style='font-size:12px'><b>Make me the home page!</b></a>
显然,正则表达式停在“MSIE_VER()&gt;”因为“[^&gt;] *”部分,当我使用“$ 3”时,我得到了错误的内容。
我几乎尝试了所有选项,但没有运气。
有什么想法吗?
提前谢谢大家..
答案 0 :(得分:0)
默认情况下。*会逐渐消失 - 例如。它需要onclick参数,因为正则表达式仍然有效 - 替换“。”使用[^ \“] - 它会告诉regexp除了”(不能在URL中)之外的文件“
$content = preg_replace('|<a(.*?)href=[\"\']([^"]*?)[\"\'][^>]*>(.*?)</a>|i','$3',$content);
答案 1 :(得分:0)
首先,您的代码尝试执行与添加my_function不同的操作 - 它尝试删除起始标记并仅将其替换为url。有几种方法来缓和你宣布的目标(即将my_function替换为所有hrefs),最实用的是:
$content = preg_replace('|href=[\"\'](.*?)[\"\']|i',"href=\"my_function('$1')\"",$content);
如果你需要比我使用的更谨慎的方法
$content = preg_replace('|(<a.*?)href=[\"\'](.*?)[\"\'](.*?</a>)|i',"$1href=\"my_function('$2')\"$3",$content);
最后但并非最不重要的是,如果你需要删除标签而不是你所写的内容,请告诉我有百万种方法可以做到。