gpt4 book ai didi

php - 警告 : preg_replace(): Unknown modifier

转载 作者:IT王子 更新时间:2023-10-29 00:56:38 26 4
gpt4 key购买 nike

我有以下错误:

Warning: preg_replace(): Unknown modifier ']' in xxx.php on line 38

这是第 38 行的代码:

<?php echo str_replace("</ul></div>", "", preg_replace("<div[^>]*><ul[^>]*>", "", wp_nav_menu(array('theme_location' => 'nav', 'echo' => false)) )); ?>

我该如何解决这个问题?

最佳答案

为什么会出现错误

在PHP中,正则表达式需要包含在一对delimiters中。 .定界符可以是任何非字母数字、非反斜杠、非空白字符; / , # , ~是最常用的。请注意,也可以使用方括号样式分隔符,其中左括号和右括号是开始和结束分隔符,即 <pattern_goes_here> , [pattern_goes_here]等等都是有效的。

Unknown modifier X”错误通常出现在以下两种情况:

  • When your regular expression is missing delimiters.

  • When you use the delimiter inside the pattern without escaping it.

在这种情况下,正则表达式是 <div[^>]*><ul[^>]*> .正则表达式引擎会考虑从 < 开始的所有内容至 >作为正则表达式模式,之后的所有内容都作为修饰符。

Regex: <div[^>  ]*><ul[^>]*>
│ │ │ │
└──┬──┘ └────┬─────┘
pattern modifiers

]这是一个未知的修饰符,因为它出现在关闭 > 之后定界符。这就是 PHP 抛出该错误的原因。

根据模式,未知修饰符投诉也可能是关于 * 的, + , p , /)或几乎任何其他字母/符号。只有imsxeADSUXJuvalid PCRE modifiers .

如何修复

修复很简单。只需用任何有效的分隔符包裹您的正则表达式模式。在这种情况下,您可以选择 ~ 并获得以下内容:

~<div[^>]*><ul[^>]*>~
│ │
│ └─ ending delimiter
└───────────────────── starting delimiter

如果您在使用定界符后仍收到此错误,可能是因为模式本身包含未转义的所述定界符。

或者转义分隔符

/foo[^/]+bar/i肯定会抛出错误。因此,如果它出现在正则表达式中的任何位置,您可以使用 \ 反斜杠对其进行转义:

/foo[^\/]+bar/i
│ │ │
└──────┼─────┴─ actual delimiters
└─────── escaped slash(/) character

如果您的正则表达式模式包含如此多的定界符,这将是一项乏味的工作。

当然,更简洁的方法是完全使用不同的定界符。理想情况下,一个字符不会出现在正则表达式模式内的任何地方,比如 # - #foo[^/]+bar#i .

更多阅读:

关于php - 警告 : preg_replace(): Unknown modifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20705399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com