Java正则表达式中 matcher.find()方法的理解
2011-12-16 11:39
483 查看
我想采集一个网址的链接,然后提取链接文字。为了完成这一步骤,我分两步走:
1、提前<a>和</a>之间的内容。如 从 "p id=km> <a href=http://hi.baidu.com>空间</a> | <a ";提取;<a href=http://hi.baidu.com>空间</a>
2、提取出"空间"两个字。
以下是我的代码。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest
{
public static void main(String[] args)
{
String s="<p id=km> <a href=http://hi.baidu.com>空间</a> | <a ";
String regex="<a.*?/a>";
//String regex = "<a.*>(.*)</a>";
Pattern pt=Pattern.compile(regex);
Matcher mt=pt.matcher(s);
while(mt.find())
{
System.out.println(mt.group());
String s2=">.*?</a>";
Pattern pt2=Pattern.compile(s2);
Matcher mt2=pt2.matcher(mt.group());
System.out.println(mt2.group());//请注意这里
}
}
}
上面这个程序是错误的
下面的程序才是对的,也就是,将执行代码
System.out.println(mt2.group());//请注意这里
更改为
while(mt2.find())
{
System.out.println(mt2.group());//请注意这里
}
下面是正确的代码。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest
{
public static void main(String[] args)
{
String s="<p id=km> <a href=http://hi.baidu.com>空间</a> | <a ";
String regex="<a.*?/a>";
//String regex = "<a.*>(.*)</a>";
Pattern pt=Pattern.compile(regex);
Matcher mt=pt.matcher(s);
while(mt.find())
{
System.out.println(mt.group());
String s2=">.*?</a>";
Pattern pt2=Pattern.compile(s2);
Matcher mt2=pt2.matcher(mt.group());
while(mt2.find())
{
System.out.println(mt2.group());//请注意这里
}
}
}
}
我是这么理解的:实际上,只有执行了find()方法 后,状态机matcher才是真正开始进行匹配工作的!
1、提前<a>和</a>之间的内容。如 从 "p id=km> <a href=http://hi.baidu.com>空间</a> | <a ";提取;<a href=http://hi.baidu.com>空间</a>
2、提取出"空间"两个字。
以下是我的代码。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest
{
public static void main(String[] args)
{
String s="<p id=km> <a href=http://hi.baidu.com>空间</a> | <a ";
String regex="<a.*?/a>";
//String regex = "<a.*>(.*)</a>";
Pattern pt=Pattern.compile(regex);
Matcher mt=pt.matcher(s);
while(mt.find())
{
System.out.println(mt.group());
String s2=">.*?</a>";
Pattern pt2=Pattern.compile(s2);
Matcher mt2=pt2.matcher(mt.group());
System.out.println(mt2.group());//请注意这里
}
}
}
上面这个程序是错误的
下面的程序才是对的,也就是,将执行代码
System.out.println(mt2.group());//请注意这里
更改为
while(mt2.find())
{
System.out.println(mt2.group());//请注意这里
}
下面是正确的代码。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest
{
public static void main(String[] args)
{
String s="<p id=km> <a href=http://hi.baidu.com>空间</a> | <a ";
String regex="<a.*?/a>";
//String regex = "<a.*>(.*)</a>";
Pattern pt=Pattern.compile(regex);
Matcher mt=pt.matcher(s);
while(mt.find())
{
System.out.println(mt.group());
String s2=">.*?</a>";
Pattern pt2=Pattern.compile(s2);
Matcher mt2=pt2.matcher(mt.group());
while(mt2.find())
{
System.out.println(mt2.group());//请注意这里
}
}
}
}
我是这么理解的:实际上,只有执行了find()方法 后,状态机matcher才是真正开始进行匹配工作的!
相关文章推荐
- java正则表达式的匹配结果遍历方法find()和matches()不同
- java正则表达式中 matcher.find()和 matcher.matches()的区别 .
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- java正则表达式的匹配结果遍历方法find()和matches()不同
- Java基础_正则表达式_Matcher常用方法
- 一个案例帮你理解java正则表达式split分割方法
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- Java中正则表达式相关类中Matcher.group()方法
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- Java正则表达式之Matcher类的find和matches方法的区别
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- 将斜杠替换成两个斜杠 java replaceAll方法 正则表达式