我在使用正则表达式时总是遇到困难。我已经为此寻求帮助,但我无法完全找到我要找的东西。
我有遵循这种模式的文本 block :
[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);
关于php - 使用正则表达式解析方括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6196427/