0

パーサーに問題がありました。ウェブサイトで画像リンクを読みたいのですが、これは通常は正常に機能します。しかし、今日、特殊文字を含むリンクを取得しましたが、通常の正規表現は機能しませんでした。

これは私のコードがどのように見えるかです。

Pattern t = Pattern.compile(regex.trim());

Matcher x = t.matcher(content[i].toString());
if(x.find())
{
    values[i] = x.group(1);
}

そして、これはhtmlの一部であり、問​​題を引き起こします

<div class="open-zoomview zoomlink" itemscope="" itemtype="http://schema.org/Product"> 
<img class="zoomLink productImage" src="

http://tnm.scene7.com/is/image/TNM/template_335x300?$plus_335x300$&amp;$image=is{TNM/1098845000_prod_001}&amp;$ausverkauft=1&amp;$0prozent=1&amp;$versandkostenfrei=0" alt="Produkt Atika HB 60 Benzin-Heckenschere" title="Produkt Atika HB 60 Benzin-Heckenschere" itemprop="image" /> 
</div> 

これは、src 属性の一部を取得するために使用している正規表現です。

<img .*src="(.*?)" .*>

リンク内のすべての特殊文字と関係があると思います。しかし、それらすべてを回避する方法がわかりません。私はすでに試しました

Pattern.quote(content[i].toString())

しかし結果は同じで、何も見つかりませんでした。

4

4 に答える 4

2

この.文字は通常、改行文字以外のすべてにのみ一致します。したがって、img-tag に改行がある場合、パターンは一致しません。

を使用するPattern.compile(..., Pattern.DOTALL)か、パターンの先頭に追加します(?s)

dotall モードでは、式 . 行末記号を含む任意の文字に一致します。デフォルトでは、この式は行末記号と一致しません。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html#DOTALL

于 2012-09-27T13:19:32.117 に答える
0

実際には修飾子<img\\s\\.*?\\bsrc=["'](\\.*?)["']\\.*?>とともに使用する必要があります。(?s)

于 2012-09-27T13:14:44.330 に答える
0

正規表現は次のようになります。

String regex = "<img .*src=\"(.*?)\" .*>";
于 2012-09-27T13:21:21.493 に答える
0

これはおそらく、タグ内の改行が原因です。。キャラが合わない。

HTML の解析に正規表現を使用しないことを検討しましたか? HTML 解析に正規表現を使用することは、壊れやすい構造であることで有名です。これには、JSoup などの解析ライブラリの使用を検討してください。

于 2012-09-27T13:22:24.600 に答える