PHP7 - 不再支持 /e 修饰符,请改用 preg_replace_callback
PHP7 - The /e modifier is no longer supported, use preg_replace_callback instead
有人可以帮我解决我遇到的这个错误吗?
Warning: preg_replace(): The /e modifier is no longer supported, use
preg_replace_callback instead
我的原码:
$match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("[=12=]")', strtolower(trim($match[1])));
所以我试了一下:
$match[1] = preg_replace_callback('/(?<=^|[\x09\x20\x2D])./e',
function ($matches) {
foreach ($matches as $match) {
return strtoupper($match);
}
},
strtolower(trim($match[1])));
但我仍然遇到同样的错误:
Warning: preg_replace_callback(): The /e modifier is no longer
supported, use preg_replace_callback instead
错误消息告诉您删除新代码中包含的 e
修饰符。
/ (?<=^|[\x09\x20\x2D]). / e
^ ^------Pattern-------^ ^ ^ ---- Modifiers
| |
-------Delimiters-------
你需要去掉修饰符,所以preg_replace_callback('/(?<=^|[\x09\x20\x2D])./e', ...)
应该是preg_replace_callback('/(?<=^|[\x09\x20\x2D])./' , ...)
。
顺便说一句,您不会从在新代码中使用 foreach
循环中获益。匹配项将始终位于数组的第二项中。这是一个不使用循环的例子:
$inputString = 'foobazbar';
$result = preg_replace_callback('/^foo(.*)bar$/', function ($matches) {
// $matches[0]: "foobazbar"
// $matches[1]: "baz"
return "foo" . strtoupper($matches[1]) . "bar";
}, $inputString);
// "fooBAZbar"
var_dump($result);
有人可以帮我解决我遇到的这个错误吗?
Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
我的原码:
$match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("[=12=]")', strtolower(trim($match[1])));
所以我试了一下:
$match[1] = preg_replace_callback('/(?<=^|[\x09\x20\x2D])./e',
function ($matches) {
foreach ($matches as $match) {
return strtoupper($match);
}
},
strtolower(trim($match[1])));
但我仍然遇到同样的错误:
Warning: preg_replace_callback(): The /e modifier is no longer supported, use preg_replace_callback instead
错误消息告诉您删除新代码中包含的 e
修饰符。
/ (?<=^|[\x09\x20\x2D]). / e
^ ^------Pattern-------^ ^ ^ ---- Modifiers
| |
-------Delimiters-------
你需要去掉修饰符,所以preg_replace_callback('/(?<=^|[\x09\x20\x2D])./e', ...)
应该是preg_replace_callback('/(?<=^|[\x09\x20\x2D])./' , ...)
。
顺便说一句,您不会从在新代码中使用 foreach
循环中获益。匹配项将始终位于数组的第二项中。这是一个不使用循环的例子:
$inputString = 'foobazbar';
$result = preg_replace_callback('/^foo(.*)bar$/', function ($matches) {
// $matches[0]: "foobazbar"
// $matches[1]: "baz"
return "foo" . strtoupper($matches[1]) . "bar";
}, $inputString);
// "fooBAZbar"
var_dump($result);