不是直接的。wordpress API正在使用preg\\u match/preg\\u replace,但没有公开flags参数。这就是你需要通过麻木不仁标志(i)的地方。
在此处查看其实现:https://github.com/WordPress/WordPress/blob/a8802232ecac8184cbe6e8dbe9c6a7bd0f5b7dee/wp-includes/class-wp-rewrite.php
可能最简单的解决方案就是使用一个小助手函数来为您执行此操作:
function anyCase($rules){
$insensitive = array();
foreach ($rules as $regex => $mapping) {
$regex = preg_replace_callback(\'([A-Za-z])\', function($matches){
return "[" . strtoupper($matches[1]) . strtolower($matches[1]) . "]";
}, $regex);
$insensitive[$regex] = $mapping;
}
return $insensitive;
}
给定的
$rules = array(\'my-books/?$\' => \'index.php?pagename=my-books\');
var_dump(anyCase($rules));
将输出数组(1){[“[Mm][Yy]-[Bb][Oo][Oo][Kk][Ss]/?$”]=>字符串(27)“index.php?pagename=my books”}
因此,您可以保持规则干净/简单:-)
如果您运行的是不支持闭包的旧PHP,您可以改为:
function lowerOrUpper($matches){
return "[" . strtoupper($matches[0]) . strtolower($matches[0]) . "]";
}
function anyCase($rules){
$insensitive = array();
foreach ($rules as $regex => $mapping) {
$regex = preg_replace_callback(\'([A-Za-z])\', lowerOrUpper, $regex);
$insensitive[$regex] = $mapping;
}
return $insensitive;
}
干杯