duandi4238 2012-04-06 23:06
浏览 73
已采纳

正则表达式匹配和<a href>?

I found this code posted on SO to change text links into hyperlinks:

function auto_link_text($text)
{ 
   $pattern  = '#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#';
   $callback = create_function('$matches', '
   $url       = array_shift($matches);
   $url_parts = parse_url($url);

   $text = parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH);
   $text = preg_replace("/^www./", "", $text);

   $last = -(strlen(strrchr($text, "/"))) + 1;
   if ($last < 0) {
       $text = substr($text, 0, $last) . "&hellip;";
   }

   return sprintf(\'<a rel="nowfollow" href="%s">%s</a>\', $url, $text);
  ');

  return preg_replace_callback($pattern, $callback, $text);
}

However, it seems to change them into hyperlinks even if they are already a part of a hyperlink so you end up with something like <a href="<a href (etc). I figure what I could do is check for an already formatted hyperlink and if I don't find one, I can do that function. Or even put the check in the function. So something like:

  function auto_link_text($text)
{
  if preg_match(proper stuff in here){
      return $text;
        }else{
       $pattern  = '#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#';
       $callback = create_function('$matches', '
   $url       = array_shift($matches);
   $url_parts = parse_url($url);

   $text = parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH);
   $text = preg_replace("/^www./", "", $text);

   $last = -(strlen(strrchr($text, "/"))) + 1;
   if ($last < 0) {
       $text = substr($text, 0, $last) . "&hellip;";
   }

   return sprintf(\'<a rel="nowfollow" href="%s">%s</a>\', $url, $text);
  ');

  return preg_replace_callback($pattern, $callback, $text);
}
}

Or perhapse the regex in the function should be changed.

  • 写回答

1条回答 默认 最新

  • dongziche8030 2012-04-06 23:08
    关注

    Add (?<!href=") just after the first # of your regex. This will ensure that it's not already inside a tag.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度