substr()到preg_replace()匹配php

时间:2016-10-15 22:58:30

标签: php regex preg-replace substr

我在PHP中有两个函数,trimmer($string,$number)toUrl($string)。我想修剪用toUrl()提取的网址,例如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;    
}

但问题是匹配的值返回\\0而不是$url之类的变量,可以使用函数trimmer()轻松修剪。

问题是我如何将substr()应用于\\0这样的事件substr("\\0",0,20)

1 个答案:

答案 0 :(得分:2)

你想要的是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. 您可能希望寻找更好的正则表达式以匹配网址,您可以通过快速搜索找到大量的正则表达式
  3. 你可能希望通过htmlspecialchars()运行你的匹配(主要是“&amp;”的问题,但这取决于你如何逃避其余的字符串。
  4. 编辑:提问者请求提供更多PHP 4友好版。