/**
 * 例子写的不好,仅供参考
 * 取taskid:与stat:之间的数字,例子中结果为:12345
 * 取stat:与yj:之间的数字,例子中结果为:3
 * 取yj:之后的所有字符       例子中结果为:同意,很好。
 */
public static void test(){
String str = "你好taskid:12345,,stat:3;yj:同意,很好。";  
Pattern pattern = Pattern.compile("taskid:(.+?)stat:"); //标点怎么去掉
Matcher matcher = pattern.matcher(str);
if(matcher.find())
  System.out.println(matcher.group(1));
}
正则java

解决方案 »

  1.   


    public static void main(String[] args){
         /**
         * 例子写的不好,仅供参考
         * 取taskid:与stat:之间的数字,例子中结果为:12345
         * 取stat:与yj:之间的数字,例子中结果为:3
         * 取yj:之后的所有字符       例子中结果为:同意,很好。
         */
            String str = "你好taskid:12345,,stat:3;yj:同意,很好。";  
            Pattern pattern = Pattern.compile("taskid:(.+?)stat:"); //标点怎么去掉
            Pattern pattern1 = Pattern.compile("taskid:(\\d+)[^s]+stat:");
            Pattern pattern2 = Pattern.compile("stat:(\\d+)[^y]+yj:");
            Pattern pattern3 = Pattern.compile("yj:(.+)");
            Matcher matcher1 = pattern1.matcher(str);
            Matcher matcher2 = pattern2.matcher(str);
            Matcher matcher3 = pattern3.matcher(str);
            if(matcher1.find())
              System.out.println(matcher1.group(1));
            if(matcher2.find())
                System.out.println(matcher2.group(1));
            if(matcher3.find())
                System.out.println(matcher3.group(1));
    }输出
    12345
    3
    同意,很好。
      

  2.   

    public static void main(String[] args) { String str = "你好taskid:12345,,stat:3;yj:同意,很好。";
    Pattern pattern = Pattern
    .compile("taskid:(\\d*).*stat:(\\d*).*yj:(.*)"); 
    Matcher matcher = pattern.matcher(str);
    if (matcher.find())
    System.out.println(matcher.group(1));
    System.out.println(matcher.group(2));
    System.out.println(matcher.group(3));
    }
      

  3.   

    string reg = "taskid:(\\d*).*stat:(\\d*).*yj:(.*)"
      

  4.   


    /**
     * @author XXX
     * @date Aug 30, 2013 10:13:34 AM<BR/>
     * @param args
     */
    public static void main(String[] args) {
    String str = "你好taskid:12345,,stat:3;yj:同意,很好。";
    Pattern pattern = Pattern.compile("(\\w+):(\\d+)|yj:(.*)", Pattern.DOTALL);
    Matcher matcher = pattern.matcher(str);
    while(matcher.find()){
    if(matcher.group(3) != null){
    System.out.println("yj=" + matcher.group(3));
    }else{
    System.out.println(matcher.group(1) + "=" + matcher.group(2));
    }
    }
    }
      

  5.   

    我想楼主的意思应该输入开始和结束字段,截取中间的,需要的是一个式子而不是多个吧。
    截取字符串这个很简单,但是楼主关于去掉符号说明的并不清楚,
    我暂时的理解就是截取出来的字符串,
    如果开头和结尾为符号则去掉,中间的符号则保留。对么?
    如果那样的话
    regex=".*?开始字段c([\\w|\u4E00-\u9FA5].*?[\\w|\u4E00-\u9FA5]).*?结束字段.*?";
    [\\w|\u4E00-\u9FA5]//匹配所有英文字母和数字以及所有汉字包括繁体。
    这样么?
    如果差不多这样的回一下,我再精简下
      

  6.   

    就是根据一个短信回复,取得taskid ,stat,yj这三个变量的值,
    该怎么规定短信的格式呢?
    怎么根据上行短信取变量值呢
    taskid,stat 都是Long型
    yj是String型
      

  7.   

    我第一次回答问题,希望给我信心
    \p{Punct}  标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ public static void main(String[] args) {
            String str = "你好taskid:12345,,stat:3;yj:同意,很好。";
            Pattern pattern = Pattern.compile("taskid:(\\d+).+stat:(\\d+).+:(.+)");
            Matcher matcher = pattern.matcher(str);
            if (matcher.find()) {
                System.out.println(matcher.group(1));
                System.out.println(matcher.group(2));
                System.out.println(matcher.group(3));
            }
        }