我无法将此字符串拆分为组件。
我的示例字符串是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] )
请指出我正确的方向。
答案 0 :(得分:3)
如果字符串始终采用以下格式,请使用匹配而不是拆分:
$word = "Criminal.Minds.S10E22.WEB-DL.x264-FUM[ettv]";
preg_match('~^(?<name>.*?)\.S(?<season>\d+)E(?<episode>\d+)~', $word, $m);
print_r($m);
请参阅PHP demo
然后,您可以使用name
,season
和episode
访问$m["name"]
,$m["season"]
和$m["episode"]
值。
模式详情:
^
- 字符串开头(?<name>.*?)
- 一个命名的捕获组,匹配换行符号以外的任何0+字符,尽可能少,直到第一个.... \.S
- .S
文字字符的子字符串(?<season>\d+)
- 一个&#34;赛季&#34;命名捕获组匹配1+位数E
- 文字字符E
(?<episode>\d+)
- 一个&#34;插曲&#34;命名捕获组匹配1+位数