我在以下正则表达式中找到了它:
\[(?:[^][]|(?R))*\]
它将方括号(及其内容)与嵌套方括号匹配。
[^][]
是一个字符类,表示除[
和以外的所有字符]
。
您可以避免转义[
和]
特殊字符,因为它对于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)[^][]*)*+])
避免了交替的费用。
和?我试着在谷歌上搜索,但没有成功。
我试图理解正则表达式^(\d{1,2})$在google Sheets中代表什么。快速浏览一下regex站点和intools让我感到困惑。有谁能帮忙吗?
我正在试图理解是什么意思。即使我将其删除,该表达式的工作原理也是一样的,即: 我知道我可以用引用匹配的模式。是什么?
问题内容: 以下代码是众所周知的将重音符转换为纯文本的代码: 我用这种方法代替了“手工制作”方法,但是我需要了解replaceAll的“ regex”部分 1)什么是“ InCombiningDiacriticalMarks”? 2)它的文档在哪里?(和类似的?) 谢谢。 问题答案: 是Unicode块属性。在JDK7中,您将可以使用两部分表示法来编写它,这对于读者来说可能更清楚。它在UAX#44
这个正则表达式什么意思?这里$1代表什么?
代码: 输出: 请注意它是而不是(意思是字母)。我在谷歌上搜索了一下,但什么也没找到。有人能给我一些提示吗?