代码之家  ›  专栏  ›  技术社区  ›  Cory Dee

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

  •  0
  • Cory Dee  · 技术社区  · 17 年前

    我有一个API调用,它基本上返回托管wiki应用程序页面的HTML。然后我要做一些substr,str_-replace和preg_-replace功夫来按照我的网站风格指南格式化它。

    我做了一组调用来格式化我的左导航(将一个指向pagex的链接改为wikiparse?page=pagex类型)。我可以在左边的导航系统上安全地做到这一点。然而,在正文中,我不能安全地假设链接是指向内部页面的链接。它很可能是到外部资源的链接。所以我需要做一个preg_替换,匹配后面没有http://的href=

    这是我的一招:

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

    这似乎会删除页面上的全部内容。有人看到我滑倒的地方吗?我不觉得自己离得太远,只是不知道下一步该去哪里。

    干杯

    2 回复  |  直到 17 年前
        1
  •  1
  •   Gumbo    17 年前

    这个 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://) 是正则表达式。但是当我们使用 / 作为定界符, / 正则表达式内部必须使用反斜杠进行转义。

        2
  •  1
  •   vartec    17 年前

    regexp缺少起始分隔符和结束分隔符(默认为“/”);

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