php - 计数我做了一个 preg_replace 我通过字典运行匹配并将其用作放置的项目?
问题描述
我想做一个正则表达式来查找$startDate
. 因此,如果月份是 11 Mei 2020,我想用 05 替换 Mei。我想match[0]
通过字典来获取正确的对应数字来做到这一点。我怎样才能做到这一点?
function doGetEarliestUpcomingDate($today, $dates)
{
foreach($dates as $date)
{
$startDate = $date['startdatum'];
preg_replace('/ (.*?) /', this.do_dutch_month_name_to_number($match[0]), $startDate);
}
}
function doDutchMonthNameToNumber($monthName){
$monthName = strtolower($monthName);
$monthDictionary = array(
'januari' => '01',
'februari' => '02',
'maart' => '03',
'april' => '04',
'mei' => '05',
'juni' => '06',
'juli' => '07',
'augustus' => '08',
'september' => '09',
'oktober' => '10',
'november' => '11',
'december' => '12',
);
return $monthDictionary[$monthName];
}
解决方案
如果您只想替换匹配项,您可以使用\K
忘记当前匹配的内容,并使用正向前瞻(?=
来确保\h+
后面有一个水平空格和 4 位数字。
\b\d+\h+\K[a-z]+(?=\h+\d{4})\b
使用preg_replace_callback,您可以将单个匹配添加到函数中doDutchMonthNameToNumber
例如
$replaced = preg_replace_callback('/\b\d+\h+\K[a-z]+(?=\h+\d{4})\b/i', function($matches){
return $this->doDutchMonthNameToNumber($matches[0]);
}, $startDate);
echo $replaced; // 11 05 2020
除了使用\K
,您还可以使用捕获组并将第二个捕获组添加$matches[2]
到函数中。
\b(\d+\h+)([a-z]+)(\h+\d{4})\b
推荐阅读
- css - 出现在图片后面的 CSS 下拉菜单
- c++ - C++ 数组返回不正确的数字
- mysql - 即使使用 IP 地址,MagicMirror SQL 连接也会出现 ENOTFOUND 错误
- powershell - What are the cmd and powershell equivalent commands for the following grep?
- java - org.springframework.core.convert.ConverterNotFoundException:没有找到能够从类型转换的转换器
- javascript - Vue SPA 在嵌套承诺中检索错误代码(不是 200)的状态代码
- ios - 如何在 Swift 中将变量值设置回之前的状态?
- css - 需要一个工具来自动缩放文本框中的文本大小
- javascript - 使用 (.reportValidity) 后打开 Bootstrap 模式的问题
- c++ - 部分专用模板的单独实现