使用 preg_match 或 Symfony dom 爬虫获取 php 中两个字符之间的字符串

get the string between two char in php using preg_match or Symfony dom crawler

我有这样的字符串

Power.S04E10.You......

我想得到字符串

中的0410

注意:在 s 字符和 e 字符之后,它总是两位数。

在我的项目中,我已经使用了 Symfony dom 爬虫

我感谢任何使用 dom 爬虫或 preg_match

的解决方案

这里的性能是一个问题,因为代码被放置在有很多实例的循环中。

到目前为止,我编写的这段代码为我提供了上面字符串中的 s04e10 部分。我不知道如何分别获得 0410

$matches = [];
$s = 'Power.S04E10.You.Cant.Fix.This.720p.&.1080p.NF.WEB-DL.DD5.1.x264-NTb';
$t = preg_match('/s([0-9]){2}e([0-9]){2}/i', $s, $matches);

提前致谢

您可以使用

$s = 'Power.S04E10.You.Cant.Fix.This.720p.&.1080p.NF.WEB-DL.DD5.1.x264-NTb';
if (preg_match('/\.s([0-9]+)e([0-9]+)\./i', $s, $matches)) {
    echo $matches[1] . " - " . $matches[2]; // => 04 - 10
}

参见PHP demo and the online regex demo

我假设点之间有 SXXEYY,如果没有,请将 \. 替换为 \b,字边界。

图案详情

  • \. - 一个点
  • s - sS
  • ([0-9]+) - 第 1 组:一个或多个数字(如果您认为使用 ([0-9]{2}) 效果更好,可以将重复次数限制为两个)
  • e - eE
  • ([0-9]+) - ([0-9]+) - 第 2 组:一个或多个数字(如果你认为使用 ([0-9]{2}) 效果更好,可以将重复次数限制为两次)
  • \. - 一个 . 字符

$matches[1] 包含组 1 的内容,$matches[2] 包含组 2 的内容。