使用PHP正则表达式从字符串中提取年份

使用PHP正则表达式从字符串中提取年份,php,regex,preg-match-all,Php,Regex,Preg Match All,我想从字符串中提取年份。我得到了一个不完整的解决方案。我的字符串将始终像: 请将jazz 2014和2015+的mpg信息发送到我的手机号码 +123456789 我尝试了以下正则表达式 preg_match_all('!\d{4}+| \d{4}+\W!', $str, $matches); 这将输出以下数组 Array ( [0] => Array ( [0] => 2015 [1] => 20

我想从字符串中提取年份。我得到了一个不完整的解决方案。我的字符串将始终像:

请将jazz 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+                
            )

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

你可以用

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

细节

\b字边界 \d{4}-4位数字 \b-另一个单词边界 \+? - 可选的1或0个引用加上符号。 :

输出:

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

在空格之间匹配日期4位数字(可选后跟a+):

preg_match_all('( [0-9]{4}\+? )', $str, $matches);

echo '<pre>' . print_r($matches[0], true) . '</pre>';

非常感谢。它帮助我从中获得了很多年string@PawanThakur您也可以使用\b?:20 | 19\d{2}\b仅提取当代年份。谢谢您的建议。但是我对上面的代码很满意,因为我使用了数组,比如数组'03/2016'、'1995'、'2002第4系列'、'2003/2004'、'04/1991'、'12/2009'、'06/1977-311XXXX'、'04/2008'、'02/1999 T系列'、'06/1995 N159XXX';我从$matches[0][0]中获得了完美的年份。再次感谢
preg_match_all('( [0-9]{4}\+? )', $str, $matches);

echo '<pre>' . print_r($matches[0], true) . '</pre>';
Array
(
    [0] =>  2014 
    [1] =>  2015+ 
)