2009-07-03 30 views

答えて

24

一つは、可能性:

String imgRegex = "<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>"; 

が可能である(大文字と小文字を区別せずに一致している場合)。ちょっと混乱しており、引用符が使用されていない場合は意図的に無視されます。文字列を気にせずにそれを表現するには、エスケープ:

<img[^>]+src\s*=\s*['"]([^'"]+)['"][^>]*> 

これは一致します>ではありません

  • <img
  • 一つ以上の文字(すなわちを単一または二重引用符を含んでいなくてもよい'又は"
  • 画像ソース()
  • の区切りを開始することが可能と他の属性)
  • src
  • 任意の空白
  • =
  • 任意の空白
  • 終了デリミタ
  • 式はここで停止することができますが、私はその後、追加:>(もっと可能な属性)ではありません
    • ゼロ以上の文字を
    • >

タグを閉じます注目すべき事項:

  • src=も含めたい場合は、開いたブラケットをさらに左に移動してください:-)
  • 区切り文字なしの区切りバランシングや属性値は気にしません。また、属性などの不正な形式の属性>または'または"を含む画像ソースが含まれます)。
  • このような正規表現でHTMLを解析することは、自明ではなく、せいぜい大部分のケースで機能する素早いハックです。それはここで

    があり、彼の答えを変更し、Pattern.compileに渡されたパラメータが私のために働いたとして、変更された文字列src\\s*=\\s*([\"'])?([^\"']*)を渡して、エラーを示し、 手遅れ

    コピーcletus年代なので、この答えは、Googleのサーチャーのためである

+0

ありがとうございます;これは文字列に一致する「」を返します。私だけ "kk.txt";私があまりにも多くを求めていないことを願って); –

+0

最初のサブダッチは、あなたが望むものを返すべきです。グループへのアクセス方法については、http://java.sun.com/docs/books/tutorial/essential/regex/groups.htmlを参照してください。基本的には、マッチ結果に 'group()'メソッドを引数 '1'で使用します。 – DMI

+0

キャプチャされたサブグループを取得する方法の例については、上のcletusのコードを参照してください。単に 'group()'の引数を '1'にするだけです。 – DMI

17

この質問はここにたくさんあります。

正規表現はです。この問題を処理する方法はです。あなた自身に好意を持ち、何らかの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は、単純なことです場合。

+0

xpathでもこの方が良いでしょう* – annakata

+2

paにリンクしないと言っていますrserは本当に有用ではありません。 – wds

+1

私は同意します。しかし、私はデータ内に小さなスニペットを持ち、ループ内の各データ要素に対してパーサの読み込みと値の取得がパフォーマンスの観点から実行可能かどうかを確かめないでください。 –

0

あなたはimg-Tagのsrc属性を意味していますか?その場合は、次のようにすることができます:

<[Ii][Mm][Gg]\\s*([Ss][Rr][Cc]\\s*=\\s*[\"'].*?[\"']) 

これは動作するはずです。 src = '...'という表現はparanthesesなので、それはmatcher-groupであり、別々に処理することができます。

+0

はい;イメージからsrc属性が必要です。しかし、この式のJavaでのコンパイル;これを確認してください。 –

+1

誰かが二重引用符の代わりにアポストロフィを使用して属性値を制限するまでは動作します(src = 'foo')。また、imgタグに他の属性があると、あなたのアプローチは失敗します。関係する複雑さはかなり高いですが、良い正規表現でほとんどのケースを正しく得ることができます。私は便利だけど。 –

+1

返信いただきありがとうございます。このregExコンパイルは、次のエラーでjavaで失敗しています。 java.util.regex.PatternSyntaxException:閉じられていないGRO指数周辺 P 43 <[II] [mm]と[Ggを] \ S *([SS] [Rrの] [CC] \のs * = \「\ S * 。*?\」 ^ –

1

完全な例

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 
    } 
関連する問題