php - 使用 php 正则表达式拆分字符串

标签 php regex

我无法将此字符串拆分为组件。 我的示例字符串是 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 , seasonepisode使用 $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/

相关文章:

javascript - jQuery ajax async false 修改页面中的html

php - Yii2 ActiveQuery join keep 返回不同的值

Php函数展开化学方程式

ruby - 正则表达式匹配 `99` 但不匹配 `!99`

python - 通过Python解析 'ip addr'的输出

php - 安装 apache2 后启动 Apache HTTP 服务器失败

php - MYSQL 电子邮件验证与正则表达式不起作用

php - 如何将单个 php 文件中定义的所有常量保存到数组中?

regex - 在 TSV 的匹配之前/之后插入换行符

c# - 使为 C# 创建的正则表达式模式在 PHP 中工作