php - 获取方括号的内容,避免嵌套括号

标签 php regex recursion preg-match parentheses

(第一次发布者,通过 Google 的长期访问者)

我正在尝试提取一些方括号的内容,但我有一点麻烦。我已经让它适用于圆括号,如下所示,但我看不出应该如何修改它以适用于方括号。我原以为在此示例中将圆形替换为方形,反之亦然,但显然不行。

它需要忽略括号内的括号。所以它不会返回 (11) 但会返回 (10(11)12)。

$preg = '#\(((?>[^()]+)|(?R))*\)#x';
$str = '123(456)(789)(10(11)12)';

if(preg_match_all($preg, $str, $matches)) {
    $matches = $matches[0];
} else {
    $matches = array();
}

echo '<pre>'.print_r($matches,true).'</pre>';

This returns:

Array (
    [0] => (456)
    [1] => (789)
    [2] => (10(11)12)
)

这是完美的。但是,我怎样才能使它适用于带有方括号的字符串,例如:

$str = '123[456][789][10[11]12]'; 

最佳答案

$preg = '#\[((?>[^\[\]]+)|(?R))*\]#x';

关于php - 获取方括号的内容,避免嵌套括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2110617/

相关文章:

php - 如何检查用户是否已在 Javascript 中上传文件

php - while 循环中的 while (mysql_fetch_array)

php - 如何一次轻松地插入、更新或删除记录

python - 用正则表达式匹配特定序列?

java - 学习Java递归从书,Java完整引用

php - 如何从 **created_at** date = **today's date** 的表中查询数据?

javascript - 用于从文件中查找和替换特定字符串的正则表达式

regex - 如何匹配转义组符号 {&date :dd.\{mm\}.yyyy} 而不是 {&date :dd. {mm}.yyyy} 与 vba 和正则表达式

recursion - 在递归期间为变量赋值

javascript - 在递归函数中用静态变量替换全局变量