替换本地链接,保留外部链接
问题描述:
我有一个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://)
是正则表达式。但是,因为我们使用/
作为分隔符,所以正则表达式中出现的/
必须使用反斜杠进行转义。
答
您的正则表达式缺少开始和结束分隔符(默认为'/');
$result = preg_replace('/href\=\"(?!http\:\/\/)/','href="bla?id=',$result);
好眼睛!我知道这件事很明显......谢谢。 – 2009-04-09 13:14:08