使用正则表达式解析方括号

hel*_*on3 4 php regex debugging

我一直很难用正则表达式.我一直在寻找帮助,但我找不到我想要的东西.

我有以下模式的文本块:

[php] ...这里有任何类型的代码示例[/ php]

我需要:

  • 检查的方括号,其中可以包含任意数量的20-30编程语言的名称(php,ruby,等).
  • 需要抓住开始和结束括号之间的所有代码.

我制定了以下正则表达式:

#\[([a-z]+)\]([^\[/]*)\[/([a-z]+)\]#i

这很好地匹配了一切.但是,当代码示例包含方括号时,它会中断.如何修改它以使这些打开/关闭括号之间的任何字符匹配以供以后使用?

ale*_*lex 5

这是你想要的正则表达式.它匹配标签的位置,因此php标签只会结束php标签.

/\[(\w+)\](.*?)\[\/\1\]/s
Run Code Online (Sandbox Code Playgroud)

或者如果你想明确匹配你可以使用的标签......

$langs = array('php', 'python', ...); 

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

preg_match_all('/\[(' . $langs . ')\](.*?)\[\/\1\]/s', $str, $matches);
Run Code Online (Sandbox Code Playgroud)