&引用;捕捉;使用php忽略内联js的正则表达式中的链接

&引用;捕捉;使用php忽略内联js的正则表达式中的链接,php,regex,Php,Regex,我一直在尝试用PHP制作一个正则表达式,从html页面(我无法控制)捕获链接及其内容,并用我的链接替换它 i、 e: 变成: <a style="position:absolute;more_styles:more;" href="my_function('http://www.google.co.il/')" class="something">This is the content</a> 这是我写的正则表达式: $content = preg_replac

我一直在尝试用PHP制作一个正则表达式,从html页面(我无法控制)捕获链接及其内容,并用我的链接替换它

i、 e:


变成:

<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);
$content=preg|u replace(“| | 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>

显然,由于“[^>]*”部分的原因,regexp停止在“MSIE_VER()>”,当我使用“$3”时,我得到了错误的内容

我尝试了几乎所有的方法来实现这一点,但没有成功

有什么想法吗


提前感谢大家。

默认情况下。*将接受evryting它可以-例如,它接受onclick参数,因为正则表达式仍然有效-将“.”替换为[^\”]-它将告诉regexp接受evryting EXCLUDE(不能在URL中)

$content=preg|u replace(“| | i”、“$3”、$content);

首先,您的代码尝试执行与添加my_功能不同的操作—它尝试删除起始标记,并仅用url替换它。有几种方法可以实现您声明的目标(即,将my_函数替换为所有HREF),最实用的方法是:

$content = preg_replace('|href=[\"\'](.*?)[\"\']|i',"href=\"my_function('$1')\"",$content);
如果你需要比我更谨慎的方法

$content = preg_replace('|(<a.*?)href=[\"\'](.*?)[\"\'](.*?</a>)|i',"$1href=\"my_function('$2')\"$3",$content);

$content=preg\u replace(“|”)(这并没有解决上面提到的错误,而是解决了其他一些问题。您已经保护它不包含“在$2中,但它已经通过使用非贪婪运算符?和[\“\]”完成了)组。但是它不能解决>问题。嗨,谢谢你的快速响应。我做了整个替换,因为我不想影响“base”、“link”等标记,只有“a”标记…你的正则表达式替换了所有的正则表达式..欢迎你。现在让我看看它是否有效和/或接受答案。好吧,就像我说的,它有一个问题。如果我替换了所有的“链接”标签html样式表不适用…抱歉,我完全不明白您在说什么问题。以前没有看到您的编辑。现在一切正常。再次感谢
$content = preg_replace('|href=[\"\'](.*?)[\"\']|i',"href=\"my_function('$1')\"",$content);
$content = preg_replace('|(<a.*?)href=[\"\'](.*?)[\"\'](.*?</a>)|i',"$1href=\"my_function('$2')\"$3",$content);