我无法将此字符串拆分为组件。
我的示例字符串是 Criminal.Minds.S10E22.WEB-DL.x264-FUM[ettv]
。我试图把它分成以下几部分:
犯罪心理,10、22
。
虽然我对 perl regex 有所涉猎,但 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 demo
然后,您可以访问 name
, season
和 episode
使用 $m["name"]
的值, $m["season"]
和 $m["episode"]
.
图案细节:
-
^
- 字符串开始 -
(?<name>.*?)
- 一个命名的捕获组匹配除换行符号以外的任何 0+ 个字符,尽可能少,直到第一个.... -
\.S
-.S
文字字符的子串 -
(?<season>\d+)
- 一个名为“season”的捕获组匹配 1 个以上的数字 -
E
- 文字字符E
-
(?<episode>\d+)
- 一个名为捕获组匹配 1+ 数字的“剧集”
关于php - 使用 php 正则表达式拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41482600/