【问题标题】:php strip from text stringphp从文本字符串中剥离
【发布时间】:2011-06-18 16:58:29
【问题描述】:

我有一个字符串:

...<a href="http://mple.com/nCCK8.png">...

从这里我试图去掉

"nCCK8.png" part

我尝试了 substr,但这需要 2 个数字并且不起作用,因为它可以在字符串中的不同位置。它在字符串中只出现一次。

基本字符串在 nCCK8.png 部分之前总是有 mple.com/,并且总是在 "> 之后。

最简单的方法是什么?

【问题讨论】:

  • 你听说过爆炸功能吗? $var1 = explode('/',$var);然后回显 $var1[0] $var1[1] $var1[2] $var1[3];显示内容

标签: php html regex


【解决方案1】:

哇,所有这些其他答案都如此复杂。

$tmp = explode('/', $string);
//if you actually WANT the "nCCK8.png" part
return substr($tmp[count($tmp) - 1], 0, -2);

//if you actually want the rest of it
$tmp = $array_pop($tmp);
return substr(implode('/', $tmp), 0, -2);

除非字符串比您发布的要长,并且包含其他斜杠,否则应该可以。

【讨论】:

  • 布拉德的回答绝对是正确的选择。
  • 我个人更希望看到explode、count和strpos用来解决问题。相当琐碎且易于理解。如果您必须使用正则表达式,请务必记录下它。
  • 您知道图像文件名之前的最小片段数,因此从那里开始搜索包含“.png”(或您要查找的任何其他文件名)的片段。就我个人而言,我会走正则表达式路线,因为它更适用于全球,但如果您想要的部分通常位于您检查的前一两个部分,那么这种方式实际上可能更快。
【解决方案2】:

例如通过simplexml 或DOM(参见this answer)获取href 元素,然后使用parse-url 获取实际文件,最后使用basename

<?php

$href = 'http://mple.com/nCCK8.png';
$url_parts = parse_url($href);
echo basename($url_parts['path']);

?>

【讨论】:

    【解决方案3】:
    [^\/]+?\.png
    
    $_ = null;
    if (preg_match('/([^\/]+?\.png)/i',$data,$_)){
      echo $_[1];
    }
    

    工作演示:http://www.ideone.com/3IkhB

    【讨论】:

    • $_?闻起来像你来自 PERL 地区;)
    • @ThiefMaster:我倾向于使用$_,因为它几乎不会与其他用户在我的代码范围内的变量名称发生冲突。 ;-) 但是,你永远不知道... ;p
    • 没错,我并没有说它不好。顺便说一句,不需要初始化它 - byref 传递未定义的变量不会触发通知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2012-09-30
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多