String 使用preg_match或Symfony dom crawler在php中获取两个字符之间的字符串

String 使用preg_match或Symfony dom crawler在php中获取两个字符之间的字符串,string,preg-match,String,Preg Match,我有一根这样的绳子 电源。S04E10。你 我想获取字符串中的04和10 注意:在s字符和e字符之后总是有两位数字 在我的项目中,我已经使用了symfonydomcrawler 我非常感谢使用dom crawler或preg_match的任何解决方案 性能是这里的一个问题,因为代码放在有大量实例的循环中 到目前为止,我编写的这段代码给出了上面字符串中的s04e10部分。我不知道如何分别获得04和10 $matches = []; $s = 'Power.S04E10.You.Cant.Fix.T

我有一根这样的绳子

电源。S04E10。你

我想获取字符串中的
04
10

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

在我的项目中,我已经使用了symfonydomcrawler

我非常感谢使用dom crawler或preg_match的任何解决方案

性能是这里的一个问题,因为代码放在有大量实例的循环中

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

$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
}
请参阅和

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

图案细节

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

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

我编辑了文章并附上了代码。我不知道什么是“捕获”。捕获组
(…)
允许提取正则表达式匹配的部分。这段文字被称为捕获。因为你解释了细节。我有一个关于点字符的问题,你把它放在图案前后。在模式中写入更多细节是否有助于性能?@hamidreza我使用它不是为了性能,而是为了准确性。季节和事件值似乎出现在点之间。如果没有,请替换为
\b
,以确保在单词边界处匹配
s
e\d+
<代码>/\bs([0-9]+)e([0-9]+)\b/i对。再次感谢,似乎有三种类型的文本
Power.S04E07.你对我的脸撒谎.720p.和.1080p.NF Power S04E07.你对我撒谎720p和1080p WEBRip DD5.1 Power(2014)-04x03-你是那种人
你能写出与我相配的preg\u吗?我的意思是,有没有办法为上述情况写一篇预赛?如果主要问题不可读,我会将这三种类型添加到主要问题中here@hamidreza看,这已经适用于两种类型的字符串,并且将适用于所有三种类型的字符串。