【问题标题】:PHP Separate two different sections in one inputPHP 在一个输入中分隔两个不同的部分
【发布时间】:2013-03-19 20:28:56
【问题描述】:

我正在开发一个基于 PHP 的应用程序扩展,它将通过 TVRage API 类扩展一个启动器风格的应用程序,以将结果返回给可能在任何地方的用户。这是通过 Alfred App (alfredapp.com) 完成的。

我想添加包含节目名称后跟 S##E## 的功能: 示例:迈克和莫莉 S01E02

节目名称可以更改,所以我不能停在那里,但我想将 S##E## 与节目名称分开。这将允许我使用该信息通过 API 继续搜索。更好的是,如果有办法抓取数字,并且只有 S 和 E 之间的数字(在示例 01 中)以及 E 之后的数字(在示例 02 中),那将是完美的。

我认为最好的函数是strpos,但仔细观察后,它会在字符串中搜索字符串。我相信我需要使用正则表达式来正确执行此操作。那会让我留下preg_match。这导致我:

$regex = ?;
preg_match( ,$input);

问题是我对正则表达式的理解不够好,无法编写它。可以使用什么正则表达式将节目名称与 S##E## 分开或仅获取两个单独的数字?

另外,如果你有一个教正则表达式的好地方,那就太好了。

谢谢!

【问题讨论】:

    标签: php regex split


    【解决方案1】:

    你可以转过来用strrpos查找字符串中的最后一个空格,然后用substr根据你找到的位置得到两个字符串。

    例子:

    $your_input = trim($input);    // make sure there are no spaces at the end (and the beginning)
    $last_space_at = strrpos($your_input, " ");
    $show = substr($your_input, 0, $last_space_at - 1);
    $episode = substr($your_input, $last_space_at + 1);
    

    【讨论】:

      【解决方案2】:

      正则表达式:

      $text = 'Mike & Molly S01E02';
      preg_match("/(.+)(S\d{2}E\d{2})/", $text, $output);
      print_r($output);
      

      输出:

      Array
      (
          [0] => Mike & Molly S01E02
          [1] => Mike & Molly 
          [2] => S01E02
      )
      

      如果你想要单独的数字:

      $text = 'Mike & Molly S01E02';
      preg_match("/(.+)S(\d{2})E(\d{2})/", $text, $output);
      print_r($output);
      

      输出:

      Array
      (
          [0] => Mike & Molly S01E02
          [1] => Mike & Molly 
          [2] => 01
          [3] => 02
      )
      

      解释:

      。 --> 匹配每个字符

      .+ --> 匹配每个字符一次或多次

      \d --> 匹配一个数字

      \d{2} --> 匹配 2 位数字

      括号是对结果进行分组。

      www.regular-expressions.info 是学习正则表达式的好地方。

      【讨论】:

      • 哇,太完美了。非常感谢你!是时候阅读正则表达式了。
      猜你喜欢
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 2013-12-03
      • 2017-09-09
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多