【问题标题】:substr() to preg_replace() matches phpsubstr() 到 preg_replace() 匹配 php
【发布时间】:2016-10-15 22:58:30
【问题描述】:

我在 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)

【问题讨论】:

  • 不知道你的问题是什么。
  • 谢谢。已添加。
  • 你想看preg_replace_callback()。使用preg_replace(),您可能已经发现,这将无法正常工作。
  • 谢谢,但是旧的 php 版本?

标签: php regex preg-replace substr


【解决方案1】:

你要的是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 更加友好。

【讨论】:

  • 看来你绝对是对的。但我正在使用 php 4.0.x,只返回此错误`语法错误,意外 T_FUNCTION`
  • PHP 4 确实已经过时,但它应该可以工作,我正在编辑我的答案以使其对 PHP 4 更友好
  • @Max PHP 4 已经 16 岁了!你真的想升级你的 PHP 版本。
  • 很抱歉检查了我的服务器,我使用的是 PHP5,它可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 2013-11-05
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多