2

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

我想添加包含节目名称后跟 S##E## 的功能:示例:Mike & Molly S01E02

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

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

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

问题是我只是不太了解正则表达式来编写它。什么正则表达式可用于将节目名称与 S##E## 分开或仅获取两个单独的数字?

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

谢谢!

4

2 回答 2

2

你可以把它转过来,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);
于 2013-03-19T20:34:26.293 回答
1

正则表达式:

$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是学习正则表达式的好地方。

于 2013-03-19T21:38:29.920 回答