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)
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.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
不加,为何报错呢:(
好神奇啊
这就好比你买了一台电脑(就相当于你定义的这个matcher对象)。电脑确实有很多很全面的功能。
但是你要用他至少得开机吧。你都没开机怎么用啊(相当于你没调用它的find())。
难道要开好多次机么?
碉堡了:(
直接把匹配放在一个ArrayList里返回过来不行么:(
那些方法都是非常有用的。因为你的正则中可能分了好几组。你要在找到的情况下你要返回什么程序是不知道的。
当然不可能用一个ArrayList返回了。站在需求的角度去考虑就明白了