从字符串中提取日期的PHP正则表达式

从字符串中提取日期的PHP正则表达式,php,regex,Php,Regex,我对这个正则表达式的东西不感兴趣。我没有得到符合我要求的正则表达式。下面是我必须用PHP中的正则表达式拆分的字符串格式 ABCxxxx_ABCDEfghi_YYYYmmddhhmmss.mp4 在这个字符串中 ABC -word(case sensitive) x -any digit ABCDEfghi -word(case sensitive) YYYYmmddhhmmss -timestamp value .mp4 -word preceded with a dot(.) 我只需要从这

我对这个正则表达式的东西不感兴趣。我没有得到符合我要求的正则表达式。下面是我必须用PHP中的正则表达式拆分的字符串格式

ABCxxxx_ABCDEfghi_YYYYmmddhhmmss.mp4
在这个字符串中

ABC -word(case sensitive)
x -any digit
ABCDEfghi -word(case sensitive)
YYYYmmddhhmmss -timestamp value
.mp4 -word preceded with a dot(.)
我只需要从这个字符串中提取日期

例如,将
YYYYmmdd
作为变量

我知道这不是写它的方式,但我试过了。尝试如下:

$s = "ABC0000_ABCDEfghi_20000101223344.mp4";
$regex = "/\ABC[0-9]{4}_ABCDEfghi_&var=[0-9]{8}[0-9]{6}+\.mp4/";
$matches = array();
$s = preg_match($regex, $s, $matches);
print_r($matches[1]);
错误:

(!)注意:未定义的偏移量:D:\wamp\www\Test\regex.php中的1 第6行调用堆栈时间存储器功能位置1 0.0000 241296 {main}()..\regex.php:0

我被卡住了。请帮我找到一个解决方案。

(?)?
(?<=_)\d+(?=\.mp4)
  • 删除
    \
    之前的
    A

  • 不要使用
    &var
    ,而是需要使用捕获组

    $regex = '~ABC[0-9]{4}_ABCDEfghi_([0-9]{8})[0-9]{6}\.mp4~';
    
  • 如有必要,添加开始
    ^
    和结束
    $
    锚定

  • 输出:

    20000101
    

    是否可以将与
    YYYY
    mm
    dd
    相同的日期拆分为同一正则表达式中的$matches[]中?是的,这就是我所需要的全部内容。
    $s = "ABC0000_ABCDEfghi_20000101223344.mp4";
    $regex = '~^ABC[0-9]{4}_ABCDEfghi_([0-9]{8})[0-9]{6}\.mp4$~';
    preg_match($regex, $s, $matches);
    print_r($matches[1]);
    
    20000101