left('abc=efg',4),1分割成left('cny=cfha',4)和1的正则表达式怎么写

hahu 2007-06-18 10:49:21
我需要这样实现的目的是,实现字符串表达式的嵌套,如
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','=')
...全文
328 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hahu 2007-06-19
  • 打赏
  • 举报
回复
解决了各位,思路比较简单,因为括号和引号都是成对的,不是在括号和引号内部的逗号即为分界
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());
tommy___2005 2007-06-18
  • 打赏
  • 举报
回复
是不是如何得到:left('abc=efg',4),1?
如果是的话,用栈的思想,很容易办到
lcy1069 2007-06-18
  • 打赏
  • 举报
回复
学习期待中。。。。
luyang1016 2007-06-18
  • 打赏
  • 举报
回复
搞得有点复杂了,不懂
CrazyGou 2007-06-18
  • 打赏
  • 举报
回复
如果只嵌套一层可以这样:
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自带的正则引擎是做不到的。可以自己用堆栈实现

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧