替换本地链接,保留外部链接

问题描述:

我有一个API调用,基本上返回托管的wiki应用程序页面的HTML。然后我做一些substr,str_replace和preg_replace kung-fu格式化它按照我的网站风格指南。替换本地链接,保留外部链接

我做了一组调用来格式化我的左侧导航栏(将pageX的链接更改为我的wikiParse?page = pageX类型的东西)。我可以安全地在左侧导航栏上执行此操作。然而,在正文中,我不能安全地假定链接是指向内部页面的链接。它很可能是一个外部资源的链接。所以我需要做一个匹配href =的preg_replace,而不是跟着http://。

这里是我的刺吧:

$result = preg_replace('href\=\"(?!http\:\/\/)','href="bla?id=',$result); 

这似乎剥离出网页上的全部内容。任何人都可以看到我滑落的位置?我不认为我太遥远了,只是看不到下一步该去哪里。

干杯

preg_* functions期待Perl-Compatible Regular Expressions (PCRE)。与普通正则表达式的结构区别在于,表达式本身被包裹到分隔符中,该分隔符将表达式与可能的modifiers分开。经典分隔符是/,但PHP允许除反斜线字符以外的其他任何非字母数字字符。另见Intruduction to PCRE in PHP

那么试试这个:

$result = preg_replace('/href="(?!http:\/\/)/', 'href="bla?id=', $result); 

这里href="(?!http://)是正则表达式。但是,因为我们使用/作为分隔符,所以正则表达式中出现的/必须使用反斜杠进行转义。

+0

好眼睛!我知道这件事很明显......谢谢。 – 2009-04-09 13:14:08

您的正则表达式缺少开始和结束分隔符(默认为'/');

$result = preg_replace('/href\=\"(?!http\:\/\/)/','href="bla?id=',$result);