警告:preg_replace():未知修饰符']'
我有以下错误:
警告:preg_replace():第38行上xxx.php中的未知修饰符’]’
这是第38行的代码:
<?php echo str_replace("</ul></div>", "", preg_replace("<div[^>]*><ul[^>]*>", "", wp_nav_menu(array('theme_location' => 'nav', 'echo' => false)) )); ?>
我该如何解决这个问题?
回答:
为什么会发生错误
在PHP中,正则表达式需要包含在一对定界符内。分隔符可以是任何非字母数字,非反斜杠,非空格字符;/
,#
,~
是最常用的。需要注意的是,还可以使用支架风格分隔符在打开和关闭括号开始和结束的分隔符,即<pattern_goes_here>
,[pattern_goes_here]
等等都是有效的。
在以下两种情况下通常会出现“ 未知修饰符X ”错误:
当您的正则表达式 。
在模式中使用 时。
在这种情况下,正则表达式为<div[^>]*><ul[^>]*>
。正则表达式引擎将从<
到的所有内容都>
视为正则表达式模式,之后将所有内容视为修饰符。
Regex: <div[^> ]*><ul[^>]*> │ │ │ │
└──┬──┘ └────┬─────┘
pattern modifiers
]
这是一个未知的修饰符,因为它出现在结束>
定界符之后。这就是PHP抛出该错误的原因。
根据不同的模式,未知的修饰投诉可能也已经约*
,+
,p
,/
或)
或几乎任何其他字母/符号。只有imsxeADSUXJu
在有效PCRE修饰符。
如何修复
修复很容易。只需使用任何有效的定界符包装您的正则表达式模式即可。在这种情况下,您可以选择**~**
并获得以下内容:
~<div[^>]*><ul[^>]*>~│ │
│ └─ ending delimiter
└───────────────────── starting delimiter
如果尽管使用了定界符但仍收到此错误,则可能是因为模式本身包含了上述定界符的未转义出现。
或转义分隔符
/foo[^/]+bar/i
肯定会引发错误。因此,**\**
如果它出现在正则表达式中的任何位置,则可以使用反斜杠对其进行转义:
/foo[^\/]+bar/i│ │ │
└──────┼─────┴─ actual delimiters
└─────── escaped slash(/) character
如果您的正则表达式模式包含很多次的定界符,那么这将是一项繁琐的工作。
当然,更干净的方法是完全使用其他定界符。理想情况下,该字符不会出现在正则表达式模式中的任何位置,例如#
- #foo[^/]+bar#i
。
以上是 警告:preg_replace():未知修饰符']' 的全部内容, 来源链接: utcz.com/qa/409840.html