鉴于此文:
[start block1]
[end block1]
lorem
[start block2]
ipsum
[start block2_1]
[end block2_1]
dolor
[end block2]
正则表达式是否可以匹配block1& block2没有block2_1。
当然,我们不能依赖于块的名称,而只能依赖于他嵌套在另一个块中的事实。
答案 0 :(得分:3)
试试这个:
\[start (\w+)\].*?\[end \1\]
只要您不重复任何块名称,您应该没问题。 \1
将匹配您已启动的块的名称,并捕获内部的任何内容。如果您的风格不支持它(如JavaScript),请确保使用全点选项(或单行),/s
或[\s\S]*
黑客。
在PHP中,使用以下代码:
preg_match_all('/\[start (\w+)\].*?\[end \1\]/s', $str, $matches);
然后您可以轻松获取名称:
$area_names = $matches[1];