让我直截了当地解决我的问题。
public static final String EXAMPLE_TEST = "<span id=\"lblObject\"><a href=\"http://www.guideline.gov/content.aspx?id=15135\" alt=\"View object\">Manual medicine guidelines for musculoskeletal injuries.</a></span>";
//public static final String EXAMPLE_TEST ="<a href=\"http://www.guideline.gov/content.aspx?id=1112\"></a>";
public static void main(String[] args) {
Pattern pattern = Pattern.compile("<a href=\"http://www.guideline.gov/content.aspx?id=(\\d+)\"");
// in case you would like to ignore case sensitivity,
// you could use this statement:
// Pattern pattern = Pattern.compile("\\s+", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(EXAMPLE_TEST);
// check all occurance
while (matcher.find()) {
System.out.print("Start index: " + matcher.start());
System.out.print(" End index: " + matcher.end() + " ");
System.out.println(matcher.group());
}
}
正则表达式存在一些问题。我使用的示例字符串只是一个虚拟字符串。实际上我将有一个html文件,其中有许多url链接具有以下模式http://www.guideline.gov/content.aspx?id=some_number
。我需要从那个html文件中获取这些链接。请大家帮我看一下我的正则表达式错误。
答案 0 :(得分:2)
问题是问号?
是一个正则表达式,意思是“一个或没有”,但是你将它用作文字字符:你必须转义问号:
Pattern pattern = Pattern.compile("<a href=\"http://www.guideline.gov/content.aspx\\?id=(\\d+)\"");
这里的关键区别是:
...content.aspx\\?id...
注意问号前面的双反斜杠,这就是在java中为正则表达式编写单个反斜杠的方式,因此模式为...content.aspx\?id...
你的正则表达式没有问号,而是有{ - 1}}而不是x
。
你也应该逃避你的点,但它可能已经足够接近了。
答案 1 :(得分:2)
你可以这样引用你的正则表达式:
Pattern pattern = Pattern.compile("<a href=\"\\Qhttp://www.guideline.gov/content.aspx?id=\\E(\\d+)\"");
\ Q 告诉正则表达式引擎引用正则表达式的下一部分(即忽略任何元字符)
\ E 告诉正则表达式引擎引用的部分已结束。
答案 2 :(得分:1)
使用以下程序。
String htmlText = "<span id=\"lblObject\"><a href=\"http://www.guideline.gov/content.aspx?id=15135\" alt=\"View object\">Manual medicine guidelines for musculoskeletal injuries.</a></span>";
Pattern pattern = Pattern.compile( "href=\"(http://www.guideline.gov/content.aspx\\?id=.*?)\"" );
Matcher matcher = pattern.matcher( htmlText );
while ( matcher.find() )
{
String matchedText = matcher.group( 0 );
Pattern p = Pattern.compile("href=\"(.*?)\"");
Matcher m = p.matcher(matchedText);
String url = null;
if (m.find()) {
url = m.group(1);
System.out.println(url);
}
}
// output : http://www.guideline.gov/content.aspx?id=15135
答案 3 :(得分:0)
你的尝试几乎是正确的。你犯的唯一错误是不逃避?在.aspx?id=
。如果您只想获取您的模式,那么您的模式也会包含一些信息(<a href=\"
和最后\"
)。只获取URL的正确模式是
"http://www.guideline.gov/content.aspx\\?id=\\d+"
因此,使用以下代码段,您应该能够提取所有网址
Pattern pattern =
Pattern.compile("http://www.guideline.gov/content.aspx\\?id=\\d+");
Matcher matcher = pattern.matcher(htmlText);
while (matcher.find()) {
// do something
}