此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【RunUpwind】截止到2008-07-02 15:14:01的历史汇总数据(不包括此帖):
发帖的总数量:25                       发帖的总分数:1210                     
结贴的总数量:25                       结贴的总分数:1210                     
无满意结贴数:3                        无满意结贴分:100                      
未结的帖子数:0                        未结的总分数:0                        
结贴的百分比:100.00%               结分的百分比:100.00%                  
无满意结贴率:12.00 %               无满意结分率:8.26  %                  
敬礼!

解决方案 »

  1.   

    代码有误,改为:
    String regEx="(<abc>)";
    String str="<abc>dddabc</abc>abcf<abc>dslka</abc>"; 
    Pattern p=Pattern.compile(regEx); 
    Matcher m=p.matcher(str); 
    if(m.find()){ 
      for(int i=0;i<=m.groupCount();i++){ 
        System.out.println(m.group(i)); 
      } 
    }
      

  2.   

    public static void main(String[] args) {
    String regEx="(<abc>[\\w\\s]*</abc>)"; 
    String str=" <abc>dddabc </abc>abcf <abc>dslka </abc>"; 
    Pattern p=Pattern.compile(regEx); 
    Matcher m=p.matcher(str); 
    while(m.find()){ 
        System.out.println(m.group(1)); 
    }
    }
    这个满足你的输出结果,不过跟你的代码不一样。但愿对你有用!
      

  3.   


    public static void main(String[] args) {
    String regEx="(<abc>[\\w\\s]*</abc>).*(<abc>[\\w\\s]*</abc>)"; 
    String str=" <abc> ddd abc </abc> a cf <abc>dsl ka </abc>"; 
    Pattern p=Pattern.compile(regEx); 
    Matcher m=p.matcher(str); 
    if(m.find()){ 
    for(int i=1;i <=m.groupCount();i++){ 
        System.out.println(m.group(i)); 

    }
    }估计你想要这个!
      

  4.   

    public static void main(String[] args) {
    String regEx="(<abc>[\\w\\s]*</abc>).*(<abc>[\\w\\s]*</abc>)"; 
    String str=" <abc> ddd abc </abc> a cf <abc>dsl ka </abc>"; 
    Pattern p=Pattern.compile(regEx); 
    Matcher m=p.matcher(str); 
    if(m.find()){ 
    for(int i=1;i <=m.groupCount();i++){ 
        System.out.println(m.group(i)); 

    }
    }
    估计你想要这个!
      

  5.   

    对不起,我没有把问题描述清楚
    1. <abc>...</abc>之间可能有任意字符,但绝不会有</abc>
    2. <abc>...</abc>可能有多个(不止两个)我之前按照"<abc>...</abc>之间可能有任意字符,但绝不会有</abc>"的思路,
    找到了这个贴子:
    http://hi.baidu.com/uniquejava/blog/item/b5c702ce0667753bb600c880.html
    http://www.cjsdn.net/post/view?bid=1&id=190134&tpg=1&ppg=1&sty=1#190735 
    但是没写出来.
      

  6.   

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test3 {
        public static void main(String[] args) {
            String str = "<abc>dddabc</abc>abcf<abc>dslka<aa>asdasdf</abc>";
            String regex = "<abc>(.*?)</abc>";
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(str);
            while (m.find()) {
                System.out.println(m.group(1));
            }
        }
    }
      

  7.   

    再改进一下:import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test3 {
        public static void main(String[] args) {
            String str = "<abc>dddabc</abc>abcf<abc>dslka<aa>\nasdasdf</abc>";
            String regex = "<abc>(.*?)</abc>";
            Pattern p = Pattern.compile(regex, Pattern.DOTALL);
            Matcher m = p.matcher(str);
            while (m.find()) {
                System.out.println("FIND: " + m.group(1));
            }
        }
    }这样可以输出<abc></abc>之间的任意字符(包括换行符什么的),如果连<abc></abc>都要的话,
    只要把 m.group(1) 改成 m.group() 就行了。
      

  8.   

    TO bao110908:
      太好了,就是我想要的效果,能稍作解释吗?
      "<abc>(.*?)</abc>"
      Pattern.DOTALL
      

  9.   

    (.*?) 量词 *? 表示勉强式进行匹配,即匹配最小的,而直接放 * 的话,是尽可能多的进行匹配。比如字符串 a====b====b==表达式:a.*b 将匹配 a====b====b
    表达式:a.*?b 将匹配 a====bPattern.DOTALL 是一个匹配标志,没有这个标志时 . 匹配不包括行结束符的所有字符,也就是说
    . 是不能匹配换行、换页等等这类行结束符的,加上 Pattern.DOTALL 的话就能进行匹配了,
    DOTALL 嘛,DOT 表示所有的,呵呵 :)