Pattern linkPattern = Pattern.compile("\\[.*?\\]\\(.*?\\)");
Matcher linkMatcher = linkPattern.matcher("[link](www.baidu.com) and [link](www.youku.com)");
String result = linkMatcher.group();
System.out.println(result);
运行结果为:[link](www.baidu.com) and [link](www.youku.com)
结果不是应该为[link](www.baidu.com)吗?我用了非贪婪模式啊
------解决思路----------------------
需要先进行查找匹配,才能使用group方法。
其中正则让我做了点修改,在每个匹配点上加了分组,也就是()包裹,用于提取更多信息。
具体代码如下:
Pattern linkPattern = Pattern.compile("\\[(.*?)\\]\\((.*?)\\)");
Matcher linkMatcher = linkPattern
.matcher("[link](www.baidu.com) and [link](www.youku.com)");
while(linkMatcher.find()){
String result = linkMatcher.group();
System.out.println(result);
System.out.println(linkMatcher.group(1));
System.out.println(linkMatcher.group(2));
}
------解决思路----------------------
在使用group时一定要调用find(),否则会产生编译错误,代码如下:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ZhengZe {
public static void main(String[] args) {
Pattern linkPattern = Pattern.compile("\\[.*?\\]\\(.*?\\)");
Matcher linkMatcher = linkPattern.matcher("[link](www.baidu.com) and [link](www.youku.com)");
while(linkMatcher.find())
{
String result = linkMatcher.group();
System.out.println(result);
}
}
}
结果:
[link](www.baidu.com)
[link](www.youku.com)
------解决思路----------------------
要想只得到一个匹配结果,就对正则进行分组,然后用group(0)表示全部,group(1)只匹配第一个分组,group(2)只匹配第二个分组……以此类推
------解决思路----------------------
Pattern linkPattern = Pattern.compile("\\[.*?\\]\\(.*?\\)");
Matcher linkMatcher = linkPattern.matcher("[link](www.baidu.com) and [link](www.youku.com)");
if(linkMatcher.find()){
String result = linkMatcher.group(0);
System.out.println(result);
}
结果是[link](www.baidu.com),正是贪婪匹配的结果。