Proper solution shouldn't involve regex but XML/HTML parserjsoupのように。その兄弟のインデックス(0から数えて)1に等しい
Document doc = Jsoup.connect("http://bacula.nti.tul.cz/~jan.hybs/ada/").get();
Elements personel = doc.select("tr td:eq(1)");
for (Element person : personel){
System.out.println(person.text());
}
select("tr td:eq(1)")
すべてtr
要素を見つけようとし、その内部td
:あなたのコードは次のようになります。このツールを使用すると
。したがって、1つのtr
が3つのtd
の要素を持つ場合、中間の要素は1でインデックスされ、それが後になるものです。
Element#text()
戻り<td><a link="foo"> bar </a></td>
ブラウザでbar
ように印刷されるような要素は、(リンクの装飾と)、表現し、それはtext()
が返すものであり、選択されたテキストを。
しかし、(誰かがあなたやあなたの家族を脅かしているので)あなたが本当にアイデアの1その後、正規表現を使用する必要がある場合は、コンテンツそのものに焦点を当てることではなく、文脈上のコンテンツがあるだろうことを保証します。あなたの場合は、<a href="/zamestnanec/SOME_NUMBER">CONTENT</a>
を探してCONTENT
を選択するようです。
だからあなたの正規表現は
String regex = "<a href=\"/zamestnanec/\\d+\">(.*?)</a>";
のように見えることができ、あなたが行う必要がありますすべてが(グループ1である)(.*?)
のエキス内容です。
だからあなたのコードは(.*?)
で
String regex = "<a href=\"/zamestnanec/\\d+\">(.*?)</a>";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(yourHtml);
while(m.find()){
System.out.println(m.group(1));
}
?
が*
reluctant作るようなものを見ることができるので、最小限の可能な一致を見つけようとします。このコードは、デフォルトで.
以来、その?
のない最も可能性の高い作業が行区切りにマッチすることができないだろうが、あなたのHTMLが
<a href="..">foo</a><a href="bar">bar</a>
のようになりますならば、正規表現ため(.*)
は
<a href="..">foo</a><a href="bar">bar</a>
^^^^^^^^^^^^^^^^^^^^^^^^
を表す代わりのでしょう
<a href="..">foo</a><a href="bar">bar</a>
^^^
あなたは既に書いたことと、この問題をどのように解決できないのかを示すことができますか? –
必須リンク:http://stackoverflow.com/a/1732454 regexの代わりにHTMLパーサーを使用してください。 Jsoupはかなりいいですし、CSSセレクタをサポートしています。 – Pshemo
(Ing | doc | prof)\。\ s [AZ]([az] + | \\ s [az] +)単純に私は連鎖度を最初と終わり。 – Rickertbrandsen