【问题标题】:PHP: get string between the last two designated charactersPHP:获取最后两个指定字符之间的字符串
【发布时间】:2015-11-11 02:15:53
【问题描述】:

我有一些图片的文件名是这样的:

  • my-picture_001.79-420x230.jpg
  • mypicture-002-210x370.png
  • 等等……

无论文件名是什么,它总是以:“-NumberxNumber.Extension”结尾

这里是: “-420x230.jpg”和“-210x370.png”

我想要的是能够始终检索最后两个数字。

我尝试使用“explode”功能,但可能有很多“-”和“.”和文件名中的“x”没有帮助。

我该怎么做?

谢谢。

【问题讨论】:

    标签: php string explode


    【解决方案1】:

    您可以使用explode,'-' 和 'x' 的数量无关紧要,因为您总是需要一个特定的。

    $string = 'my-picture_001.79-420x230.jpg';
    
    $last_half = end(explode('-', $string));     // '420x230.jpg'
    $last_sec = reset(explode('.',$last_half));  // '420x230'
    $values = explode('x', $last_sec);
    
    echo $values[0] // '420'
    echo $values[1] // '230'
    

    【讨论】:

    • 感谢您的回答
    【解决方案2】:

    您可以使用strrchr 查找“-”的最后一次出现并返回从该点到结尾的其余字符串。从那里你应该能够轻松地提取你需要的东西。

    【讨论】:

      【解决方案3】:

      我认为您应该使用正则表达式来提取这两个数字。

      <?php
      $reg = '/(\d*)x(\d*).\D*/i';
      $string = 'my-picture_001.79-420x230.jpg';
      
      preg_match($reg, $string, $matches);
      
      //print the result
      echo "<pre>";
      print_r($matches);
      echo "</pre>";
      ?>
      

      /D代表非数字字符
      /d 代表数字字符
      /D* 表示零个或多个非数字字符
      而我们要提取的字符会位于()里面...

      我通常使用这个网站来玩正则表达式:
      http://rubular.com/
      这是一个关于php正则表达式的教程
      http://www.phpro.org/tutorials/Introduction-to-PHP-Regex.html

      【讨论】:

      • 感谢您的回答。我将使用爆炸解决方案,但这仍然很好/
      猜你喜欢
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 2019-05-12
      • 2023-01-02
      • 2022-11-23
      相关资源
      最近更新 更多