String s="\033[47;31mhello world\033[5m\033[47;31mABCD EFGH\033[5m"这串字符中\033相当于是包头包尾是固定的而
                           包头中 \033[47;31m 后面的[47;31m   不固定
                           包尾中 \033[5m     后面的[5m     也不固定
                           中间的为文本字段                 也不固定
现在要求将这串字符串解析成为三个集合,或者数组里面安装顺序放置请帮忙解析下

解决方案 »

  1.   

    我首先想到了正则表达式来完成,可是我正则不懂,忘高手帮忙写写我的思路是这样的  首先通过一个正则表达式将字符串进行分割,分割成  
    \033[47;31mhello world\033[5m              
    \033[47;31mABCD EFGH\033[5m
    的字符串
    在进行对每一个字符串再次进行分割  分割成为 \033[47;31m   hello world  \033[5m 忘高手帮我参考参考,顺便帮我写下这样的正则表达式,不胜感激
      

  2.   

    如果都是你那有想,估计的却很容易解决了,可惜别人服务端不会那样去做
    这是通过Socket发送过来的数据,数据当然不能够改变了
    现在想的只是解析方式
      

  3.   

    你啥都是不固定,没法判断的谁知道正文是hello world, 还是啥
      

  4.   

    分成三个集合?我就分成了2个~不知道行不行
    public static void main(String[] args){
    String regx;
    String line = "\033[47;31mhello world\033[5m\033[47;31mABCD EFGH\033[5m";
    regx="\\033.[0-9]+;[0-9]+m(.*?)\\033.[0-9]+m";
    //regx="<a.*?>(.*?)</a>";
    Pattern p = Pattern.compile(regx);

    Matcher m = p.matcher(line);
    while(m.find()){
    System.out.println(m.group(1));

    }

    }
    输出:
    hello world
    ABCD EFGH
    要是还想更精确就得把需求说的更明白一点,最好写上想要什么结果
      

  5.   

    各位高手说的也对,里面的东西都不固定很难分割
    这里就是对应包头包尾部里面字段的意义,请高手帮忙想一种方便的分割方式包头里面的值\033[47;31m  我想 这里的 m应该是固定的
    QUOTE:
    字背景颜色范围: 40--49                   字颜色: 30--39
                    40: 黑                           30: 黑
                    41: 红                           31: 红
                    42: 绿                           32: 绿
                    43: 黄                           33: 黄
                    44: 蓝                           34: 蓝
                    45: 紫                           35: 紫
                    46: 深绿                         36: 深绿
                    47: 白色                         37: 白色ANSI控制码:  -------对应包尾里面的值
    QUOTE:
    \033[0m关闭所有属性
    \033[1m设置高亮度
    \033[4m下划线
    \033[5m闪烁
    \033[7m反显
    \033[8m消隐
    \033[30m    --    \033[37m设置前景色
    \033[40m  --   \033[47m设置背景色
    \033[nA光标上移n行
    \033[nB光标下移n行
    \033[nC光标右移n行
    \033[nD光标左移n行
    \033[y;xH设置光标位置
    \033[2J 清屏
    \033[K清除从光标到行尾的内容
    \033[s保存光标位置
    \033[u恢复光标位置
    \033[?25l  隐藏光标
    \033[?25h  显示光标
      

  6.   

    还是不太明白,这样,你举例吧,就说这个字符串处理之后你想得到什么结果
    \033[47;31mhello world\033[5m\033[47;31mABCD EFGH\033[5m
      

  7.   

    弱弱的问下,你这个地方为什么要取grop(1)
    我取grop(0)的时候出现乱码这样的问题
      

  8.   

    刚刚查了下JDK,发现\\033他为默认为是   \0nn 带有八进制值 0 的字符 nn (0 <= n <= 7) 
    而此处为字符串有没有更好点的匹配呀
      

  9.   

    那个乱码的问题原来没遇上过,现在没想到什么解决的办法,group是分组的意思,就是在正则里()括起来就是1组没时间解决乱码问题了,给你这个代码你先将就吧
    public static void main(String[] args){
    String regx;
    String line = "\033[47;31mhello world\033[5m\033[47;31mABCD EFGH\033[5m";
    regx="(.[0-9]+;[0-9]+m)(.*?)(.[0-9]+m)";
    Pattern p = Pattern.compile(regx);

    Matcher m = p.matcher(line);
    while(m.find()){
    System.out.println("\\033"+m.group(1));
    System.out.println(m.group(2).replaceAll("\\033", ""));
    System.out.println("\\033"+m.group(3));
    }

    }
    输出:
    \033[47;31m
    hello world
    \033[5m
    \033[47;31m
    ABCD EFGH
    \033[5m
      

  10.   

    哈哈
    悲剧,现在才知道要解析的是shell脚本里面的字符
    所有规范都按照shell脚本里面来
      

  11.   

    高手帮忙写个正则匹配所有以 \033[任意字符长度m  的这样的字符串
    就是相当于找到 \033[47;31mhello\033[5dm world\033[5m\033[47;31mABCD EFGH\033[5m字符串中的
    \033[47;31m \033[5dm \033[5m \033[47;31m \033[5m
      

  12.   

    public static void main(String args []){
    String line = "\033[47;31mhello\033[5dm world\033[5m\033[47;31mABCD EFGH\033[5m";
    String regx = "\\033(.*?m)";
    Pattern p = Pattern.compile(regx);
    Matcher m = p.matcher(line);
    while(m.find()){
    System.out.println(m.group(1));
    }
    }
    输出:
    [47;31m
    [5dm
    [5m
    [47;31m
    [5m