0

我一直在php中使用它...

preg_match_all('|<a href="http://www.example.com/photoid/(.*?)"><img src="(.*?)" alt="(.*?)" /></a>|is',$xx, $matches, PREG_SET_ORDER);

其中 $xx 是作为字符串的整个网页内容,用于查找所有匹配项。

这会将 $matches 设置为一个二维数组,然后我可以使用基于 $matches 长度的 for 语句循环并使用例如 ..

$matches[$i][1]这将是第一个(.*?)

$matches[$i][2]这将是第二个(.*?)

等等....

我的问题是如何在java中复制它?我一直在阅读有关 java regex 的教程和博客,并且一直在使用 Pattern 和 Matcher,但似乎无法弄清楚。此外,matcher 永远不会找到任何东西。所以我while(matcher.find())一直是徒劳的,通常会抛出一个错误,说还没有找到匹配项

这是我要匹配的模式的java代码是......

String pattern = new String(
    "<a href=\"http://www.example.com/photoid/(w+)\"><img src=\"(w+)\" alt=\"(w+)\" /></a>");

我也试过了。。

String pattern = new String(
    "<a href=\"http://www.example.com/photoid/(.*?)\"><img src=\"(.*?)\" alt=\"(.*?)\" /></a>");

String pattern = new String(
    "<a href=\"http://www.example.com/photoid/(\\w+)\"><img src=\"(\\w+)\" alt=\"(\\w+)\" /></a>");

没有找到匹配项。

4

2 回答 2

1

不是Java专家,但字符串不应该转义双引号和转义吗?

 "<a href=\"http://www.mysite.com/photoid/(.*?)\"><img src=\"(.*?)\" alt=\"(.*?)\" /></a>"
 or
 "<a\\ href=\"http://www.mysite.com/photoid/(.*?)\"><img\\ src=\"(.*?)\"\\ alt=\"(.*?)\"\\ /></a>"
于 2013-09-03T16:54:11.293 回答
1

你发布的正则表达式对我有用,所以也许你的错在于你如何使用它:

String test = "<html>\n<a href=\"http://www.mysite.com/photoid/potato.html\"><img src=\"quack-quack\" alt=\"hi\" /></a>\n</html>";
// This is exactly the pattern code you posted :
String pattern = new String(
    "<a href=\"http://www.mysite.com/photoid/(.*?)\"><img src=\"(.*?)\" alt=\"(.*?)\" /></a>");

Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(test);
m.find(); // returns true

请参阅Java 教程了解如何使用它。

于 2013-09-03T18:17:27.170 回答