使用 PHP 正则表达式从字符串中提取年份,并在后面加上可选的加号[重复]

问题描述 投票:0回答:2

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

请将 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
2个回答
6
投票

您的

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

您可以使用

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

查看正则表达式演示

详情

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

PHP 演示:

$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+
)

0
投票

匹配日期(4 位数字),可选地后跟

+
,空格之间:

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

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

输出:

Array
(
    [0] =>  2014 
    [1] =>  2015+ 
)
© www.soinside.com 2019 - 2024. All rights reserved.