我无法将此字符串拆分为多个组件。 我的示例字符串是
Criminal.Minds.S10E22.WEB-DL.x264-FUM[ettv]
。我试图将其分为以下几部分:
Criminal Minds, 10, 22
。
虽然我已经涉足了一些 Perl 正则表达式,但 php 实现还是让我感到困惑。
我写了以下内容:
$word = "Criminal.Minds.S10E22.WEB-DL.x264-FUM[ettv]";
// First replace periods and dashes by spaces
$patterns = array();
$patterns[0] = '/\./';
$patterns[1] = '/-/';
$replacement = ' ';
$word = preg_replace($patterns, $replacement, $word);
print_r(preg_split('#([a-zA-Z])+\sS(\d+)E(\d+)#i', $word));
哪个输出
Array ( [0] => Criminal [1] => WEB DL x264 FUM[ettv] )
如果字符串始终采用这种格式,请使用匹配而不是拆分:
$word = "Criminal.Minds.S10E22.WEB-DL.x264-FUM[ettv]";
preg_match('~^(?<name>.*?)\.S(?<season>\d+)E(?<episode>\d+)~', $word, $m);
print_r($m);
查看 PHP 演示
然后,您可以使用
name
、season
和 episode
访问 $m["name"]
、$m["season"]
和 $m["episode"]
值。
图案详情:
^
- 字符串的开头(?<name>.*?)
- 一个命名捕获组,匹配除换行符之外的任何 0+ 个字符,尽可能少,直到第一个....\.S
- .S
文字字符的子字符串 (?<season>\d+)
- 一个名为捕获组匹配 1+ 位数字的“季节”E
- 文字字符 E
(?<episode>\d+)
- 名为捕获组匹配 1+ 位数字的“片段”