什么是“ ”正则expression式?
我发现它在下面的正则expression式:
\[(?:[^][]|(?R))*\] 它将方括号(及其内容)与嵌套的方括号一起匹配。
  [^][]是一个字符类,意思是除[和]之外的所有字符。 
 您可以避免转义[和]特殊字符,因为它对preg_函数中使用的正则expression式引擎PCRE没有歧义。 
 由于[^]在PCRE中不正确,因此正则expression式parsing的唯一方法是在后面将要closures的字符类中。 跟[后面的]一样。 它不能在字符类中重新打开字符类(除了POSIX字符类[:alnum:] )。 那么最后]是清楚的; 这是angular色类的结尾。 但是, [字符类外部必须被转义,因为它被parsing为字符类的开始。 
 以同样的方式,你可以写[]]或[[]或[^[]而不用转义字符类中的[或] 。 
你可以使用这个语法的几个正则expression式:PCRE(PHP,R),Perl,Python,Java,.NET,GO,awk,Tcl( 如果你用花括号划定你的模式,谢谢Donal Fellows ),…
但不是与:Ruby,JavaScript( 除IE <9 ),…
 正如m.buettner指出的那样, [^]]不是含糊不清的,因为]是第一个字符, [^a]]被看作是不是a后面跟着的] 。 要有a和] ,你必须写: [^a\]]或[^]a] 
 在JavaScript的特殊情况下,规范允许[]作为永不匹配的正则expression式标记(换句话说, []将总是失败), [^]作为匹配任何字符的正则expression式。 然后[^]]被视为任何字符后跟一个] 。 实际的实现各不相同,但现代浏览器一般都坚持规范中的定义。 
图案细节:
 \[ # 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)[^][]*)*+]) ,避免了交替的代价。