我正在开发一个基于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 ##分开,或者只获取两个单独的数字?
另外,如果你有一个教授正则表达式的好地方,那就太棒了。
谢谢!
答案 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是学习正则表达式的好地方。