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

时间:2015-03-16 05:34:08

标签: 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(.)

我只需要从这个字符串中提取日期。

即,将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

我被困住了。请帮我解决一下。

2 个答案:

答案 0 :(得分:1)

(?<=_)\d+(?=\.mp4)

只需使用它。参见演示。

https://regex101.com/r/bW3aR1/4

$re = "/(?<=_)\\d+(?=\\.mp4)/";
$str = "ABC0000_ABCDEfghi_20000101223344.mp4";

preg_match_all($re, $str, $matches);

答案 1 :(得分:1)

  1. 删除\

  2. 之前的A
  3. 请勿使用&var,而是需要使用捕获组。

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

  5. DEMO

    $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