php - 正则表达式获取括号内的文本

标签 php regex

我正在查看一个字符串并尝试将所有内容放入一对括号内。 在某些情况下,内容可能会发生变化,并且最大值和最小值可能不存在。

get(max(fieldname1),min(fieldname2),fieldname3)where(something=something) sort(fieldname2 asc)

不保证 where() 和 sort() 一定存在。
每组之间可能有空格,并且[编辑]关键字可能并不总是相同。

get(something) where(something)
get(something)where(something) sort(something)

应该使用什么正则表达式模式? 实际上,它应该返回:

Array (
[0] => max(fieldname1),min(fieldname2),fieldname3
[1] => something=something
[2] => fieldname2 asc
)

我意识到将第一组括号更改为 { 或 [ 可能会解决问题,但我很顽固,想通过正则表达式这样做。

编辑 我能想到的最好的方法是使用 preg_match_all()

/[a-zA-Z0-9_]+\((.*?)\)/

最佳答案

您最好使用解析器,例如:

$str = 'get(max(fieldname1),min(fieldname2),fieldname3)where(something=something) sort(fieldname2 asc)';
$array = array();
$buffer = '';
$depth = 0;
for ($i=0; $i<strlen($str); $i++) {
    $buffer .= $str[$i];
    switch ($str[$i]) {
        case '(':
            $depth++;
            break;
        case ')':
            $depth--;
            if ($depth === 0) {
                $array[] = $buffer;
                $buffer = '';
            }
            break;
    }
}
var_dump($array);

关于php - 正则表达式获取括号内的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/567790/

相关文章:

JavaScript 正则表达式提取特定单词后面引号之间的所有字符

Python正则表达式从点分隔的字母中删除点

php - Python phpserialize 意外行为

php - 如何构建账户余额系统

c# - 正则表达式创建 html anchor 标记

JavaScript 正则表达式组合

php - 在 Xampp 中将 Gmail 配置为 SMTP 以发送邮件 - 出现错误。为什么?

php - Drupal JOIN 适用于 db_query,但不适用于 db_select

php - 通过拖放组合(合并)图像

regex - 负面回顾替代方案