下面这段代码错在哪里?(有关正则表达式)import java.util.regex.Matcherimport java.util.regex.Pattern
下面这段代码错在哪里?(有关正则表达式)
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
[解决办法]
不神奇,关键不是while,而是matcher.find(),只有执行了matcher.find()之后,指针才会指向你找到的地方,group才能够取到。
[解决办法]
这个应该这么理解。matcher对象确实是正则匹配对象。他group(1)也是去获取捕获到的第一个组。这里你只是定义了matcher。还没有去执行find()自然就找不到group(1)。
这就好比你买了一台电脑(就相当于你定义的这个matcher对象)。电脑确实有很多很全面的功能。
但是你要用他至少得开机吧。你都没开机怎么用啊(相当于你没调用它的find())。
[解决办法]
因为执行一次find就是找到第一次出现匹配的地方。用while就是为了让正则搜索到所有出现匹配的地方。
