substr() 到 preg_replace() 匹配 php

substr() to preg_replace() matches php

我在 PHP、trimmer($string,$number)toUrl($string) 中有两个函数。例如,我想 trim 用 toUrl() 提取的 url 到 20 个字符。从 https://www.youtube.com/watch?v=HU3GZTNIZ6Mhttps://www.youtube.com/wa...

function trimmer($string,$number) {
    $string = substr ($string, 0, $number);
    return $string."...";
}

function toUrl($string) {
    $regex="/[^\W ]+[^\s]+[.]+[^\" ]+[^\W ]+/i";
    $string= preg_replace($regex, "<a href='\0'>".trimmer("\0",20)."</a>",$string);
    return $string;    
}

但问题是匹配 return \0 的值不是像 $url 这样的变量,可以很容易地 trim 使用函数 [=20] =].

问题是我如何将 substr() 应用到 \0 这样的东西 substr("\0",0,20)

你要的是preg_replace_callback:

function _toUrl_callback($m) {
  return "<a href=\"" . $m[0] . "\">" . trimmer($m[0], 20)  ."</a>";
}
function toUrl($string) {
  $regex = "/[^\W ]+[^\s]+[.]+[^\" ]+[^\W ]+/i";
  $string = preg_replace_callback($regex, "_toUrl_callback", $string);
  return $string;
}

另请注意(关于您的问题的旁注):

  1. 您有一个语法错误,'$regex' 不起作用(它们不会替换单引号字符串中的 var 名称)
  2. 您可能想要寻找更好的正则表达式来匹配 URL,您可以通过快速搜索找到很多这样的正则表达式
  3. 您可能希望 运行 通过 htmlspecialchars() 匹配(主要是“&”的问题,但这取决于您如何转义字符串的其余部分。

编辑:使其更加PHP 4 友好,由提问者请求。