【问题标题】:Extract year from a string using PHP regex使用 PHP 正则表达式从字符串中提取年份
【发布时间】:2019-01-10 04:34:21
【问题描述】:

我想从字符串中提取年份。我得到了一个不完整的解决方案。我的字符串总是这样:

请将爵士 2014 和 2015+ 的 mpg 信息发送到我的手机号码 +123456789

我已经尝试了以下正则表达式;

preg_match_all('!\d{4}+| \d{4}+\W!', $str, $matches);

这将输出以下数组。

Array
(
    [0] => Array
        (
            [0] =>  2015 
            [1] =>  2014+
            [2] => 1234
            [3] => 5678
        )

)

如果有的话,我只需要获取带有 + 符号的年份部分。即,我只想要这个:

Array
    (
        [0] => Array
            (
                [0] =>  2015 
                [1] =>  2014+                
            )

    )

【问题讨论】:

    标签: php regex preg-match-all


    【解决方案1】:

    您的 \d{4}+| \d{4}+\W 模式匹配 4 位数字(注意所有格 {4}+ 量词等于 {4})或空格、4 位数字和任何非单词字符。

    你可以使用

    '~\b\d{4}\b\+?~'
    

    regex demo

    详情

    • \b - 字边界
    • \d{4} - 4 位数字
    • \b - 另一个词的边界
    • \+? - 可选(1 或 0 次)加符号。

    PHP demo:

    $re = '~\b\d{4}\b\+?~';
    $str = 'Please message mpg of jazz 2014 and 2015+ to my mobile number +123456789';
    if (preg_match_all($re, $str, $matches)) {
        print_r($matches[0]);
    }
    

    输出:

    Array
    (
        [0] => 2014
        [1] => 2015+
    )
    

    【讨论】:

    • 谢谢。它帮助我从字符串中获得了多年
    • @PawanThakur 您也可以使用\b(?:20|19)\d{2}\b 仅提取当代年份。
    • 感谢您的建议。但我对上面的代码很满意,因为我喜欢 array('03/2016','1995','2002 4th Series','2003/2004','04/1991','12/2009',' 06/1977 - 311XXXX','04/2008','02/1999 T 系列','06/1995 N159XXX');我从 $matches[0][0] 获得了完美的岁月。再次感谢
    【解决方案2】:

    匹配日期(4 位),可选地后跟 +,在空格之间:

    preg_match_all('( [0-9]{4}\+? )', $str, $matches);
    
    echo '<pre>' . print_r($matches[0], true) . '</pre>';
    

    输出:

    Array
    (
        [0] =>  2014 
        [1] =>  2015+ 
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2011-08-25
      • 2014-08-25
      • 1970-01-01
      • 2010-10-14
      • 2018-03-12
      相关资源
      最近更新 更多