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