今天在写程序的时候,碰到了一个怪事。
我想采集一个网址的链接,然后提取链接文字。为了完成这一步骤,我分两步走:
1、提前<a>和</a>之间的内容。如 从 "p id=km> <a href=>空间</a> | <a ";提取;<a href=>空间</a>
2、提取出"空间"两个字。
以下是我的代码。
import
;
import ;
public class RegTest
{
public static void main(String[] args)
{
String s = " <p id=km> <a href=>空间</a> | <a " ;
String regex = " <a.*?/a> " ;
// String regex = "<a.*>(.*)</a>";
Pattern pt = (regex);
Matcher mt = (s);
while (())
{
(());
String s2 = " >.*?</a> " ;
Pattern pt2 = (s2);
Matcher mt2= (());
(());//请注意这里
}
}
}
import ;
public class RegTest
{
public static void main(String[] args)
{
String s = " <p id=km> <a href=>空间</a> | <a " ;
String regex = " <a.*?/a> " ;
// String regex = "<a.*>(.*)</a>";
Pattern pt = (regex);
Matcher mt = (s);
while (())
{
(());
String s2 = " >.*?</a> " ;
Pattern pt2 = (s2);
Matcher mt2= (());
(());//请注意这里
}
}
}
上面这个程序是错误的
下面的程序才是对的,也就是,将执行代码
(());//请注意这里
更改为
while(())
{
(());//请注意这里
}
下面是正确的代码。
import
;
import ;
public class RegTest
{
public static void main(String[] args)
{
String s = " <p id=km> <a href=>空间</a> | <a " ;
String regex = " <a.*?/a> " ;
// String regex = "<a.*>(.*)</a>";
Pattern pt = (regex);
Matcher mt = (s);
while (())
{
(());
String s2 = " >.*?</a> " ;
Pattern pt2 = (s2);
Matcher mt2= (());
while(())
import ;
public class RegTest
{
public static void main(String[] args)
{
String s = " <p id=km> <a href=>空间</a> | <a " ;
String regex = " <a.*?/a> " ;
// String regex = "<a.*>(.*)</a>";
Pattern pt = (regex);
Matcher mt = (s);
while (())
{
(());
String s2 = " >.*?</a> " ;
Pattern pt2 = (s2);
Matcher mt2= (());
while(())
{
(());//请注意这里
(());//请注意这里
}
}
}
}
}
}
}
我是这么理解的:实际上,只有执行了find()方法 后,状态机matcher才是真正开始进行匹配工作的!