正则表达式下一个模式编号 = 前一个模式编号 + 1

regex next pattern number = previous pattern number + 1

我正在尝试创建一个正则表达式模式来检查包含由“-”分隔的两年的字符串,其中 B 年 = A 年 + 1 并且这些日期介于 2000 和 2099 之间(日期从 20 开始)

现在我有一个像这样的正则表达式 /^20[0-9]{2}-20[0-9]{2}$ it's/g 但我不知道如何添加像“year B = year A - 1”这样的规则

我希望在执行 preg_match 时得到这些结果:

2009-2010 -> true
2019-2020 -> true
2020-2021 -> true

1999-2000 -> false
2001-2099 -> false
2013-2020 -> false
2099-2100 -> false
2000-2100 -> false

您不能使用正则表达式进行数学计算

您可以使用 2 个捕获组捕获 2 个数字。使用 php,您可以检查值是否在 2000 和 2099 的阈值之间,并检查第一个值加一是否等于第二个值。

$strings = [
    "2009-2010",
    "2019-2020",
    "2020-2021",
    "1999-2000",
    "2001-2099",
    "2013-2020",
    "2099-2100",
    "2000-2100"
];

$pattern  = "/^(20\d\d)-(20\d\d)/";
foreach ($strings as $str){
    if (preg_match($pattern, $str, $match)) {
        if (intval($match[1]) + 1 === intval($match[2])) {
            echo "$str is correct". PHP_EOL;
        }
    }
}

输出

2009-2010 is correct
2019-2020 is correct
2020-2021 is correct