下面这段代码错在哪里?(有关正则表达式)
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() )。