我需要这样实现的目的是,实现字符串表达式的嵌套,如
left(left('abc=efg',4),1)怎么样把最外一层参数分割开来
可能的参数组合包括:
left('abc=efg',4),1
left('abc=efg',4),'='
'abc=efg',left('abc=efg','=')
left('abc=efg',2),left('abc=efg','=')
left(left('abc=efg',4),1)怎么样把最外一层参数分割开来
可能的参数组合包括:
left('abc=efg',4),1
left('abc=efg',4),'='
'abc=efg',left('abc=efg','=')
left('abc=efg',2),left('abc=efg','=')
如果是的话,用栈的思想,很容易办到
String str = "left('abc=efg',4),1";
String[] strs = str.split("(?<=^[^(]+|^[^(]*\\([^)]*\\)[^(]*),");
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}如果是未知层次嵌套,Java自带的正则引擎是做不到的。可以自己用堆栈实现
length = params.length();
bracketCount = 0; //在括号内
quotMarkCount = 0; //在引号内
prevComma = 0;
prevChar = ' ';
for (i = 0; i < length; i++) {
currChar = params.charAt(i);//.substring(i, i + 1);
if (quotMarkCount == 0 && currChar == '(')
bracketCount++;
else if (quotMarkCount == 0 && currChar == ')')
bracketCount--;
else if (currChar == '\'' || currChar == '\"')
{
if (prevChar != '\\')
{
if (quotMarkCount > 0)
quotMarkCount--;
else
quotMarkCount++;
}
}
else if (bracketCount == 0 && quotMarkCount == 0 && currChar == seperator)
{
list.add(params.substring(prevComma, i).trim());
prevComma = i + 1;
}
prevChar = currChar;
}
list.add(params.substring(prevComma, params.length()).trim());