【问题标题】:Returning a string after the second occurrence of a character and before the last occurrence of the same character with php使用php在第二次出现字符之后和最后一次出现相同字符之前返回一个字符串
【发布时间】:2017-09-17 20:27:23
【问题描述】:

我有几个类似于以下的字符串: ORG-000012 – 变体名称 – 数量:12 包 – 14.95 美元

我需要用 php 删除第二个连字符之前和最后一个连字符之后的所有字符。例如,上面的字符串需要返回为: 变体名称 – 数量:12 包

我曾尝试使用 strpos 和 substr,但我似乎无法获得正确的设置。请帮忙!

【问题讨论】:

    标签: php string substr strpos


    【解决方案1】:

    只需使用explode(),除以–。然后,获取第二个和第三个元素:

    <?php
    $description = "ORG-000012 – Name of variation – Quantity: 12 Pack – $14.95";
    $descriptionArray = explode(" – ", $description);
    $finalDescription = $descriptionArray[1]." – ".$descriptionArray[2];
    var_dump($finalDescription); // string(39) "Name of variation – Quantity: 12 Pack"
    

    Demo

    或者,如果两者之间的元素数量是可变的,array_shift() 和 array_pop() 将数组移除第一个和最后一个元素:

    <?php
    $description = "ORG-000012 – Name of variation – Quantity: 12 Pack – $14.95";
    $descriptionArray = explode(" – ", $description);
    array_pop($descriptionArray);
    array_shift($descriptionArray);
    var_dump($descriptionArray);
    

    Demo

    【讨论】:

    • 谢谢!这帮助我到达了我需要去的地方。演示是一个很好的接触。非常感谢!
    【解决方案2】:

    您可以使用strpos 找到第一次出现- char 的位置,并使用strrpos 找到最后一次出现的位置:

    $s = 'ORG-000012 - Name of variation - Quantity: 12 Pack - $14.95';
    $sub = substr($s,strpos($s, '-')+1, strrpos($s, '-')-strlen($s));
    print $sub; // or print trim($sub) to remove the whitespaces
    

    它的作用是,它会从- 字符第一次出现后的一个字符开始打印$s 的子字符串,并通过传递一个负值(与字符串的长度和最后一次出现- 字符的位置)作为substr 的长度。

    请注意,这也会在最后一个 - 之前打印空格字符,因此您可能还想在结果中输出 trim。

    【讨论】:

      【解决方案3】:

      可以使用 reg expr,尝试使用:

      preg_match(
          '/(?<=\s–\s)(.*)(?:\s–\s)[^\s]+$/',
          'ORG-000012 – Name of variation – Quantity: 12 Pack – $14.95',
          $matches
      );
      echo $matches[1]; //Name of variation – Quantity: 12 Pack 
      

      【讨论】:

        猜你喜欢
        • 2015-05-11
        • 2017-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-13
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多