0

初めてJavaで正規表現を使おうとしています。文字列の一部を取得したい。文字列は少し複雑です:

<description>
  &lt;a href='http://testlink.html' alt='some text'&gt;&lt;img border='0'
  src='http://s2.glbimg.com/zzag70iNYX-QK24sUp0YXQmmXhx7yb8j2Sq2YK7tvX3A6vCwEUOFnFTBONQFT-
  ni/s.glbimg.com/es/ge/f/original/2012/04/25/image.jpg' 
  alt='some' title='text' /&gt;&lt;/a&gt;&lt;br /&gt;some text; some text
</description>

私のニーズは、hrefaltにある文字列を取得することです。このために私はこのコードをやっています:

for(Element element : elements)
{
    //Elements children = element.children();
Pattern pattern = Pattern.compile("a\\bhref=*(.html|.htm)>");
String[] data = pattern.split(element.text()); ...
}

等々。現時点では、hrefのみを取得しようとしていますが成功していません。戻り値は常に文字列全体です。正しくないですか?保証のためにhtml拡張子を付けましたが、何も起こりません。

4

3 に答える 3

1
public static void main(String[] args){
  String sourcestring = "<description>&lt;a href='http://testlink.html' alt='some text'&gt;&lt;img border='0' src='http://s2.glbimg.com/zzag70iNYX-QK24sUp0YXQmmXhx7yb8j2Sq2YK7tvX3A6vCwEUOFnFTBONQFT-
ni/s.glbimg.com/es/ge/f/original/2012/04/25/image.jpg' 
alt='some' title='text' /&gt;&lt;/a&gt;&lt;br /&gt;some text; some text</description>";
  Pattern re = Pattern.compile("(?<=href='|alt=')[^']*|(?<=href=\"|alt=\")[^\"]*");
  Matcher m = re.matcher(sourcestring);
  int mIdx = 0;
    while (m.find()){
      for( int groupIdx = 0; groupIdx < m.groupCount()+1; groupIdx++ ){
        System.out.println( "[" + mIdx + "][" + groupIdx + "] = " + m.group(groupIdx));
      }
      mIdx++;
    }
  }
于 2012-08-08T20:50:32.370 に答える
1

あなたの正規表現は、あなたにとって有用であり、壊れているかもしれないものを見つけることはありません。

正規表現では、次のことが当てはまります。

* matches 0 or more of the preceding character

. is any character

したがって、現在の正規表現は、a、単語の境界、文字列href、0以上=文字、次にhtmlが続く任意の文字、またはhtmが続く任意の文字と>があるパターンに一致する文字列を見つけようとしています。キャラクター。これらの特殊な文字を使用する場合は、それらをエスケープする必要があります

正規表現を形成するためのより良い方法は、上記のAlogomorphの例のようなものです。

許可されるものの詳細については、正規表現のJavaドキュメントを参照してください:http: //docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

Web上には他にもたくさんのチュートリアルや例があります。

于 2012-08-08T20:54:59.147 に答える
1

テキスト形式が変更されないことが完全にわかっている場合を除いて、このタスクに正規表現を使用しないでください。正規表現を使用して(X | HT)MLを解析したいようですが、それは悪いことです。XMLとして解析し、XPathを使用することをお勧めします。

于 2012-08-08T21:03:14.857 に答える