import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test {
public static void main(String[] args) {
String str = "<ENTITY>1</ENTITY>" + "<ENTITY>2</ENTITY>" + "<ENTITY>3</ENTITY>" + "<ENTITY>4</ENTITY>" + "<ENTITY>5</ENTITY>"; Pattern p = Pattern.compile("<ENTITY>.*</ENTITY>", Pattern.MULTILINE);
Matcher m = p.matcher(str);
int count = 1;
while (m.find()) {
System.out.println(count + ": " + m.group());
}
}
}
输出的是:
1: <ENTITY>1</ENTITY><ENTITY>2</ENTITY><ENTITY>3</ENTITY><ENTITY>4</ENTITY><ENTITY>5</ENTITY>
怎么让程序输出
1: <ENTITY>1</ENTITY>
2: <ENTITY>2</ENTITY>
3: <ENTITY>3</ENTITY>
4: <ENTITY>4</ENTITY>
5: <ENTITY>5</ENTITY>

解决方案 »

  1.   

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class TestInners {
        public static void main(String[] args) {
            String str = "<ENTITY>1</ENTITY>" + "<ENTITY>2</ENTITY>" + "<ENTITY>3</ENTITY>" + "<ENTITY>4</ENTITY>" + "<ENTITY>5</ENTITY>";        Pattern p = Pattern.compile("<ENTITY>\\d</ENTITY>");
            Matcher m = p.matcher(str);
            int count = 1;
            while (m.find()) {
                System.out.println(count + ": " + m.group());
                count ++;
            }
        }
    }
      

  2.   

    Pattern p = Pattern.compile("<ENTITY>.*</ENTITY>", Pattern.MULTILINE);
    改成
    Pattern p = Pattern.compile("<ENTITY>.?*</ENTITY>", Pattern.MULTILINE);
    应该也可以吧,把贪婪改成懒惰
      

  3.   

     public static void main(String args[])  throws Exception{
         String str = "<ENTITY>1</ENTITY>" + "<ENTITY>2</ENTITY>" + "<ENTITY>3</ENTITY>" + "<ENTITY>4</ENTITY>" + "<ENTITY>5</ENTITY>";        Pattern p = Pattern.compile("<ENTITY>.*?</ENTITY>", Pattern.MULTILINE);
            Matcher m = p.matcher(str);
            int count = 1;
            while (m.find()) {
                System.out.println(count++ + ": " + m.group());
            }  
        }
      

  4.   

    错了,是
    Pattern p = Pattern.compile(" <ENTITY>.*? </ENTITY>", Pattern.MULTILINE); 
      

  5.   

    你耍我啊~~哈哈~~改下...
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class TestInners {
        public static void main(String[] args) {
            String str = "<ENTITY>121321321Dasdasd</ENTITY>" 
             + "<ENTITY>daf341afasda</ENTITY>" 
             + "<ENTITY>fasfa32    423fsf</ENTITY>" 
             + "<ENTITY>*%^&$^#</ENTITY>" 
             + "<ENTITY>4da64gs5q23gs</ENTITY>";        Pattern p = Pattern.compile("<ENTITY>.*?</ENTITY>");
            Matcher m = p.matcher(str);
            int count = 1;
            while (m.find()) {
                System.out.println(count + ": " + m.group());
                count ++;
            }
        }
    }
    输出:
    1: <ENTITY>121321321Dasdasd</ENTITY>
    2: <ENTITY>daf341afasda</ENTITY>
    3: <ENTITY>fasfa32    423fsf</ENTITY>
    4: <ENTITY>*%^&$^#</ENTITY>
    5: <ENTITY>4da64gs5q23gs</ENTITY>
      

  6.   

    请把<ENTITY>和</ENTITY>之间的内容想象成html代码,包括任何html代码中可能出现的字符,而不仅仅是数字,数字我只是为了给大家看的方便而已.java的默认模式是最长匹配,也就是第一次就匹配了所有文本我希望是最短匹配
    第一次匹配的结果我希望仅仅是:<ENTITY>1</ENTITY>我的关键问题是,如果把匹配模式从最长匹配,改成最短匹配.
      

  7.   

    如果是html标签的话建议使用xml解析!这样更方便
      

  8.   

    上面猴子和大虫还有我写的表达式都是一样的,效果都是把贪婪改成懒惰,就是你所说的最长改成最短另外如果<ENTITY>和</ENTITY>间允许换行的话,可以这样
    Pattern p = Pattern.compile(" <ENTITY>[\\s\\S]*? </ENTITY>", Pattern.MULTILINE);