警告: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]:未知修饰符“-”的主要内容,如果未能解决你的问题,请参考以下文章

php regex preg_match 只允许某些关键字

正则表达式 preg_match 匹配中文

将警告视为错误

警告:imageftbbox() [function.imageftbbox] - 这是啥错误

警告:mail() [function.mail]:无法连接到邮件服务器

Google Cloud Functions - 警告避免嵌套承诺承诺/不嵌套