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

时间:2018-08-02 11:55:25

标签: php regex preg-match-all

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

  

请在我的手机号码中显示爵士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+                
            )

    )

2 个答案:

答案 0 :(得分:3)

您的\d{4}+| \d{4}+\W模式匹配4个数字(请注意所有格{4}+等于{4})或一个空格,4个数字和任何非单词char。

您可以使用

'~\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+
)

答案 1 :(得分:0)

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

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

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

输出:

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