PHP在一个输入中分隔两个不同的部分

时间:2013-03-19 20:28:57

标签: php regex split

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

我想添加包含show name后跟S ## E ##的功能: 例如:Mike& Molly S01E02

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

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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是学习正则表达式的好地方。