用正则表达式解析方括号

问题描述

| 我一直很难用正则表达式。我已经在寻求帮助,但是找不到我想要的东西。 我有遵循这种模式的文本块: [PHP] ...任何类型的代码示例 [/ PHP] 我需要: 检查方括号,方括号可以包含任意数量的20-30编程语言名称
PHP
ruby
等)。 需要抓取在左括号和右括号之间的所有代码。 我已经计算出以下正则表达式:
#\\[([a-z]+)\\]([^\\[/]*)\\[/([a-z]+)\\]#i
哪个都非常匹配。但是,当代码示例包含方括号时,它会中断。如何修改它,以使这些开/关括号之间的任何字符都可以匹配以备后用?     

解决方法

        这是您想要的正则表达式。它也与标签所在的位置匹配,因此
php
标签只会以
php
标签结尾。
/\\[(\\w+)\\](.*?)\\[\\/\\1\\]/s
或者,如果您想显式地匹配可以使用的标签...
$langs = array(\'php\',\'python\',...); 

$langs = implode(\'|\',array_map(\'preg_quote\',$langs));

preg_match_all(\'/\\[(\' . $langs . \')\\](.*?)\\[\\/\\1\\]/s\',$str,$matches);
    ,        以下将起作用:
\\[([a-z]+)\\].*\\[/\\1\\]
如果您不想删除贪婪,可以执行以下操作:
\\[([a-z]+)\\].*?\\[/\\1\\]
您要做的就是检查关闭标签和打开标签是否具有相同的文本(在这种情况下,两者都是相同的编程语言),并使用
\\1
进行设置,并使其与先前匹配的组号1相匹配。 :
([a-z]+)
    ,        为什么不使用以下内容:
\\[php\\].*?\\[/php\\]
我不明白您为什么要为标签使用[a-z] +,应该有
php
或数量有限的其他标签。保持简单。 实际上,您可以使用:
\\[(php)\\].*?\\[/(\\1)\\]
这样您就可以匹配开始和结束标签。否则,您将匹配随机的打开和关闭。加上其他我不知道的js等,例如as14ѭ等。     ,        使用后向引用来引用已在正则表达式中进行的匹配:
\\[(\\w+)\\].*?\\[/\\1\\]
    ,        不确定您使用的是哪种语言,但遵循非贪婪的正则表达式是否适合您:
#\\[([a-z]+)\\](.*?)\\[/(\\1)\\]#i
而不是寻找
non-opening-square-bracket
匹配所有内容,直到使用非贪婪修饰符
.*?
获得
[