Php Count我做了一个preg_替换,通过字典运行匹配,并将其用作放置的项目?
我想用正则表达式在Php Count我做了一个preg_替换,通过字典运行匹配,并将其用作放置的项目?,php,regex,Php,Regex,我想用正则表达式在$startDate中查找月份。因此,如果这个月是2020年的11月,我想用05代替11月。我想通过在字典中运行match[0]来获得正确的对应数字。我该怎么做 function doGetEarliestUpcomingDate($today, $dates) { foreach($dates as $date) { $startDate = $date['startdatum'];
$startDate
中查找月份。因此,如果这个月是2020年的11月,我想用05代替11月。我想通过在字典中运行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
|
使用,可以将单个匹配项添加到函数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
|当我使用preg_replace_回调函数时,它也会替换空格。是否可以保留原始空格?让回调函数直接添加前导和尾随空格来返回替换可能最简单。(在这里前后只匹配一个空格字符,所以空格的类型也不可能不同。)