在年份跨度表达式中递减两个数字子字符串



我试图用这种格式减去或减去1学年的学年,例如"2020-2021"

如果是2020-2021,我想把它改成2019-2020。有办法解决这个问题吗?

我考虑过尝试使用连字符表达式进行减法,但是我被卡住了。

echo "2020-2021"-"1-1";
echo "Result: 2019-2020";

您可以使用爆炸和解析值来减去值

$minusYear = 1;
$myString = "2020-2021";
$myArray = explode('-', $myString);


foreach($myArray as $k => $v)
{
$myArray[$k] = (int) $myArray[$k] - $minusYear;
}

echo "Result ".$myArray[0]."-".$myArray[1];

您不需要将1-1硬塞到您的方法中,从而使您的任务复杂化。使用preg_replace_callback()在一行代码中定位和递减数字子字符串。

此方法以数字为目标,因此即使分隔字符发生变化也不会中断。

代码(演示):

$yearSpan = '2020-2021';
echo preg_replace_callback('/d+/', fn($m) => --$m[0], $yearSpan);

减少完整字符串匹配--$m[0]也可以写成简单减法:$m[0] - 1.

相关内容

最新更新