0

私はphpでこれを使用しています...

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

ここで、$xx は Web ページのコンテンツ全体を文字列として表したもので、すべての一致を検索します。

これにより、$matches が 2 次元配列に設定されます。これを $matches の長さに基づいて for ステートメントでループし、たとえば ..

$matches[$i][1]どれが最初だろう(.*?)

$matches[$i][2]これは2番目になります(.*?)

等々....

私の質問は、これを Java でどのように複製できるかということです。Java regex に関するチュートリアルやブログを読んでいて、Pattern と 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

あなたが投稿した正規表現は私のために働いたので、おそらくあなたのせいはあなたの使い方にあります:

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 に答える
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 に答える