Javaの次のHTMLスニペットからsrc(大文字と小文字を区別しない)タグを取得できる正規表現を探しています。HTMLタグから属性を取得するための正規表現
<html><img src="kk.gif" alt="text"/></html>
<html><img src='kk.gif' alt="text"/></html>
<html><img src = "kk.gif" alt="text"/></html>
Javaの次のHTMLスニペットからsrc(大文字と小文字を区別しない)タグを取得できる正規表現を探しています。HTMLタグから属性を取得するための正規表現
<html><img src="kk.gif" alt="text"/></html>
<html><img src='kk.gif' alt="text"/></html>
<html><img src = "kk.gif" alt="text"/></html>
一つは、可能性:
String imgRegex = "<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>";
が可能である(大文字と小文字を区別せずに一致している場合)。ちょっと混乱しており、引用符が使用されていない場合は意図的に無視されます。文字列を気にせずにそれを表現するには、エスケープ:
<img[^>]+src\s*=\s*['"]([^'"]+)['"][^>]*>
これは一致します>
ではありません
<img
'
又は"
src
=
>
(もっと可能な属性)ではありません
>
タグを閉じます注目すべき事項:
src=
も含めたい場合は、開いたブラケットをさらに左に移動してください:-)>
または'
または"
を含む画像ソースが含まれます)。があり、彼の答えを変更し、Pattern.compile
に渡されたパラメータが私のために働いたとして、変更された文字列src\\s*=\\s*([\"'])?([^\"']*)
を渡して、エラーを示し、 手遅れ
コピーcletus年代なので、この答えは、Googleのサーチャーのためである
この質問はここにたくさんあります。
正規表現はです。この問題を処理する方法はです。あなた自身に好意を持ち、何らかのHTMLパーサーを使用してください。
正規表現は、HTMLを解析する際に不安定です。いくつかのコーナーケースでは予期しない動作をする複雑な式になります。はになります。
編集:そこany number of Java HTML parsersがある
Pattern p = Pattern.compile("src\\s*=\\s*([\\"'])?([^ \\"']*)");
Matcher m = p.matcher(str);
if (m.find()) {
String src = m.group(2);
}
そして:あなたのHTMLは、単純なことです場合。
あなたはimg-Tagのsrc属性を意味していますか?その場合は、次のようにすることができます:
<[Ii][Mm][Gg]\\s*([Ss][Rr][Cc]\\s*=\\s*[\"'].*?[\"'])
これは動作するはずです。 src = '...'という表現はparanthesesなので、それはmatcher-groupであり、別々に処理することができます。
はい;イメージからsrc属性が必要です。しかし、この式のJavaでのコンパイル;これを確認してください。 –
誰かが二重引用符の代わりにアポストロフィを使用して属性値を制限するまでは動作します(src = 'foo')。また、imgタグに他の属性があると、あなたのアプローチは失敗します。関係する複雑さはかなり高いですが、良い正規表現でほとんどのケースを正しく得ることができます。私は便利だけど。 –
返信いただきありがとうございます。このregExコンパイルは、次のエラーでjavaで失敗しています。 java.util.regex.PatternSyntaxException:閉じられていないGRO指数周辺 P 43 <[II] [mm]と[Ggを] \ S *([SS] [Rrの] [CC] \のs * = \「\ S * 。*?\」 ^ –
完全な例
String htmlString = "<div class=\"current\"><img src=\"img/HomePageImages/Paris.jpg\"></div>"; //Sample HTML
String ptr= "src\\s*=\\s*([\"'])?([^\"']*)";
Pattern p = Pattern.compile(ptr);
Matcher m = p.matcher(htmlString);
if (m.find()) {
String src = m.group(2); //Result
}
ありがとうございます;これは文字列に一致する「」を返します。私だけ "kk.txt";私があまりにも多くを求めていないことを願って); –
最初のサブダッチは、あなたが望むものを返すべきです。グループへのアクセス方法については、http://java.sun.com/docs/books/tutorial/essential/regex/groups.htmlを参照してください。基本的には、マッチ結果に 'group()'メソッドを引数 '1'で使用します。 – DMI
キャプチャされたサブグループを取得する方法の例については、上のcletusのコードを参照してください。単に 'group()'の引数を '1'にするだけです。 – DMI