日期:2014-05-20  浏览次数:20932 次

下面这段代码错在哪里?(有关正则表达式)


import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

/**
 * @param args
 */
public static void main(String[] args) {

String url="http://v.tom.com/v_show/id_XxxxxxzE1MTY4.html";
String patternStr = "id_(.*)\\.html";
Pattern pattern = Pattern.compile(patternStr) ;
Matcher matcher = pattern.matcher(url);
String idStr = matcher.group(1);
System.out.println(idStr);
}

}


应该可以匹配的啊,肿么老是报错?


Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:468)
at org.video.spider.Test.main(Test.java:17)



------解决方案--------------------
如果我分析的不错的话
String patternStr = "id_(.*)\\.html";
改成
String patternStr = "id_(.*?)\\.html";
应该就没问题了。
------解决方案--------------------
代码没错,应该是你的正则表达式错了。
------解决方案--------------------
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Test5 {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
 
        String url="http://v.tom.com/v_show/id_XxxxxxzE1MTY4.html";
        String patternStr = "id_(.*)\\.html";
        Pattern pattern = Pattern.compile(patternStr) ;
        Matcher matcher = pattern.matcher(url);
        while(matcher.find()){
            String idStr = matcher.group(1);
            System.out.println(idStr);
        }
    }
 
}


>javac -encoding UTF-8 Test5.java
>Exit code: 0    Time: 1.766
>java -cp . Test5
XxxxxxzE1MTY4
>Exit code: 0    Time: 0.626
------解决方案--------------------
引用:
引用:Java code?123456789101112131415161718192021import java.util.regex.Matcher;import java.util.regex.Pattern;  public class Test5 {      /**     * @param args     */    publ……
喵的为何必须加while呢?
不加,为何报错呢:(
好神奇啊

不神奇,关键不是while,而是matcher.find(),只有执行了matcher.find()之后,指针才会指向你找到的地方,group才能够取到。
------解决方案--------------------
这个应该这么理解。matcher对象确实是正则匹配对象。他group(1)也是去获取捕获到的第一个组。这里你只是定义了matcher。还没有去执行find()自然就找不到group(1)。
这就好比你买了一台电脑(就相当于你定义的这个matcher对象)。电脑确实有很多很全面的功能。
但是你要用他至少得开机吧。你都没开机怎么用啊(相当于你没调用它的find())。