当前位置: 首页 > 面试题库 >

警告:preg_replace():未知修饰符']'

昌乐
2023-03-14
问题内容

我有以下错误:

警告: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_match返回页面源代码中所有包含在“”中的URL。 我正在使用的代码是 我收到以下错误: 问题答案: preg_match(‘~”http://(.*)”~iU’, $code, $matches); 您的问题是您需要使用定界符(我选择〜)来与模式一起使用。有关更多信息,请参见preg_match()手册页。

  • 问题内容: 好吧,所以我目前正在解析RSS feed。我已经获得了我没有问题的数据,剩下的只是解析游戏名称。 这是我当前拥有的代码(忽略草率,这只是概念的证明): 一切都很好,但是随后我开始出现此错误: 我剩下的唯一一件事就是剔除结束锚标签和句点,但是我似乎无法弄清楚为什么它不喜欢’+’。有任何想法吗? 编辑:这不应被标记为重复,因为在另一个问题问了两年之前就被问到了。 问题答案: 您需要在PHP

  • 问题内容: 我很讨厌正则表达式。我正在尝试替换为: 与带有匿名函数的preg_replace_callback一起使用。我不知道\\ 2在做什么。或就此而言,preg_replace_callback的工作方式完全一样。 实现该目标的正确代码是什么? 问题答案: 在正则表达式中,您可以使用; 来“捕获”匹配字符串的部分。在这种情况下,您正在捕获匹配的和部分。这些从1开始编号,因此您具有后向引用1和

  • 问题内容: preg_replace(‘/http:///ftp:///', ‘https://’, $value); 和内应改为 此代码给出错误: 什么是此任务的真正正则表达式? 问题答案: 尝试使用其他定界符,例如: 或(不建议使用)对正则表达式中每次出现的定界符进行转义: 另外,您正在搜索的确没有太大意义的模式,可能就是您的意思。 您可以将正则表达式缩短为: 了解错误: 在您的regex中,

  • 我有一个bot,它获取用户消息内容,删除用户消息,然后向消息发送私人消息。作者,然后在embed中发送用户消息的内容。在发送几条消息后,bot将发送2条消息,而不是1条,并显示警告。知道怎么修吗? 警告: superadmin@vps-XXXXXX:~/path$节点test.js(节点: 1059)UnHandledPromiseRejtionWarning: DiscordAPIError:未