正则表达式下一个模式编号 = 前一个模式编号 + 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
我正在尝试创建一个正则表达式模式来检查包含由“-”分隔的两年的字符串,其中 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