Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Count我做了一个preg_替换,通过字典运行匹配,并将其用作放置的项目?_Php_Regex - Fatal编程技术网

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_回调函数时,它也会替换空格。是否可以保留原始空格?让回调函数直接添加前导和尾随空格来返回替换可能最简单。(在这里前后只匹配一个空格字符,所以空格的类型也不可能不同。)