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

“ [^] []”正则表达式是什么意思?

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

“ [^] []”正则表达式是什么意思?

[^][]
是一个字符类,表示除
[
和以外的所有字符
]

您可以避免转义

[
]
特殊字符,因为它对于PCRE(
preg_
函数中使用的正则表达式引擎)不是模棱两可的。

由于

[^]
在PCRE中不正确,因此正则表达式解析的唯一方法
]
是在字符类内部,该字符类稍后将关闭。与
[
以下相同。它不能重新打开字符类内的字符类(POSIX字符类除外
[:alnum:]
)。然后最后一个
]
清楚了。它是角色类的结尾。但是,
[
字符类外部的字符必须转义,因为它被解析为字符类的开始。

以同样的方式,你可以写

[]]
或者
[[]
[^[]
不逃离
[
]
在字符类。

注意:自PHP
7.3起,您可以使用内联xx修饰符,该修饰符甚至在字符类内部也可以忽略空白字符。这样,您就可以在那样的少ambigous方式编写这些类:

(?xx) [^][ ] [ ] ] [ [ ] [^ [ ]

您可以将此语法与几种正则表达式结合使用:PCRE(PHP,R),Perl,Python,Java,.NET,GO,awk,Tcl(
如果使用大括号分隔模式,请感谢Donal Fellows ),…

但不适用于:Ruby,Javascript( IE <9除外),…

正如m.buettner所指出的那样,

[^]]
它不是模棱两可的,因为它
]
是第 一个 字符,
[^a]]
被视为
_不是
a
后跟一个的所有
]
_字符。要拥有
a
]
,您必须输入:
[^a]]
[^]a]

在Javascript的特殊情况下,该规范允许

[]
作为 永不 匹配的regex令牌(换句话说,
[]
将始终失败)和
[^]
匹配 任何字符
的regex 。然后
[^]]
视为 任何字符,后跟一个
]
。实际的实现方式有所不同,但是现代浏览器通常会遵循规范中的定义。

图案细节:

[          # literal [(?:         # open a non capturing group    [^][]   # a character that is not a ] or a [  |         # OR    (?R)    # the whole pattern (here is the recursion))*          # repeat zero or more time]          # a literal ]

在您的模式示例中,您无需转义最后一个

]

但是,您可以对此模式进行一些优化,以达到相同目的,并且将更有用的原因作为子模式重用
(使用

(?-1)
([(?:[^][]+|(?-1))*+])

(          # open the capturing group    [     # a literal [        (?:# open a non-capturing group [^][]+    # all characters but ] or [ one or more time          |# OR (?-1)     # the last opened capturing group (recursion)# (the capture group where you are)        )*+# repeat the group zero or more time (possessive)    ]      # literal ] (no need to escape))          # close the capturing group

或更好:

([[^][]*(?:(?-1)[^][]*)*+])
避免了交替的费用。



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

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

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