栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

为什么会发生错误

在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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/421591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号