0

我有一个 API 调用,它本质上返回托管 wiki 应用程序页面的 HTML。然后我根据我的网站风格指南做一些 substr、str_replace 和 preg_replace 功夫来格式化它。

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

这是我的尝试:

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

这似乎去除了页面上的全部内容。有人看到我在哪里滑倒了吗?我不认为我离得太远了,只是看不到下一步该去哪里。

干杯

4

2 回答 2

1

这些preg_*函数需要与Perl兼容的正则表达式 (PCRE)。与普通正则表达式的结构区别在于,表达式本身被包装在分隔符中,将表达式与可能的修饰符分开。经典的分隔符是,/但 PHP 允许除反斜杠字符之外的任何其他非字母数字字符。另请参阅PHP 中的 PCRE 简介

所以试试这个:

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

href="(?!http://)是正则表达式。但是当我们/用作分隔符时,/正则表达式内部的出现必须使用反斜杠进行转义。

于 2009-04-09T12:52:22.960 回答
1

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

$result = preg_replace('/href\=\"(?!http\:\/\/)/','href="bla?id=',$result);
于 2009-04-09T12:53:14.643 回答