警告:preg_match() [function.preg-match]:未知修饰符“-”
Posted
技术标签:
【中文标题】警告:preg_match() [function.preg-match]:未知修饰符“-”【英文标题】:Warning: preg_match() [function.preg-match]: Unknown modifier '-' 【发布时间】:2013-10-24 21:33:08 【问题描述】:我正在开发一个 Wordpress 网站,最近我开始收到以下警告:
警告:preg_match() [function.preg-match]:未知修饰符'-'
当我将永久链接结构更改为 /%postname%/
时开始,这是 BuddyPress 运行所必需的。如果使用默认的永久链接结构,问题就会消失。
这是发生错误的wp-includes/class-wp.php
中的代码:
if ( preg_match("#^$match#", $request_match, $matches) ||
preg_match("#^$match#", urldecode($request_match), $matches) )
【问题讨论】:
$match
的内容是什么?
Warning: preg_replace(): Unknown modifier ']'的可能重复
【参考方案1】:
这是因为-
和/
是特殊符号,你可以把这段代码改成:
if ( preg_match("/^".preg_quote($match)."/", $request_match, $matches) ||
preg_match("/^".preg_quote($match)."/", urldecode($request_match), $matches) )
但我认为问题在 wp 的核心逻辑中更深层次
【讨论】:
感谢 Ilya,但问题仍然存在。您很可能是正确的,问题出在更深的地方。 问题在同一行?-
在字符类之外没有特殊含义。
@CasimiretHippolyte 是的,值也有/
,所以-
成为修饰符【参考方案2】:
如果没有$match
变量内容,很难知道问题出在哪里,但如果您收到此警告,那是因为$match
包含#-
(即使用的模式分隔符和-
字符)。那么#
之后的所有字符都被视为修饰符。
您可以尝试将分隔符(并祈祷)更改为~
:
if ( preg_match("~^$match~", $request_match, $matches) ||
preg_match("~^$match~", urldecode($request_match), $matches) )
如果不起作用,请尝试其他分隔符。
【讨论】:
以上是关于警告:preg_match() [function.preg-match]:未知修饰符“-”的主要内容,如果未能解决你的问题,请参考以下文章
警告:imageftbbox() [function.imageftbbox] - 这是啥错误