HTMLページの構造を分析したい。ページの場合、文字列として持っており、テキストを取り除き、html 構造のみを保持したいと考えています。私は DOM パーサーを使いたくないので、xhtml だけでなく通常の html でも機能する堅牢なものが必要です。正規表現が文字列から html タグを取り除くのに十分であることは知っていますが、テキストを取り除いて html タグのみを保持するために正規表現を使用できますか?
私が使用できる他のオプション/フレームワークを知っていますか?
正規表現を使用してこれを行う簡単な方法があるとは思えません。
Jerichoは、フットプリントが小さく、外部ライブラリを追加する必要のない 1 つの jar を備えた、非常に優れた HTML パーサーです。
私が使用できる他のオプション/フレームワークを知っていますか?
JSoupを見たいと思うかもしれません。このタイプの問題を正確に解決するように設計されているようです。
以前にタグを削除したことがある場合、基本的な要点は < と > の間のすべてを削除することであることがわかります。テキストの削除は、> と < の間のすべてを削除することを除いて、非常に似ています。そうです、正規表現は、テキストを削除してタグだけを残すのに非常に役立ちます。それらを扱いたくない場合は、タグ属性を取り除くためにも使用できます。
これでまともなスタートが切れるかもしれません。私は HTML の経験があまりないので、< タグ > 以外に文字列から解析するものが他にあるかどうかわかりません。
public static void main(String[] args){
String html = "<body> text text text text </body>";
String htmlTags = null;
char c;
for(int i = 0 ; i < html.length() ; i++){
c = html.charAt(i);
if(tagStart(Character.toString(c))){
for(int j = i ; j < html.length() ; j++){
if(htmlTags != null){
htmlTags += Character.toString(html.charAt(j));
}else{
htmlTags = Character.toString(html.charAt(j));
}
c = html.charAt(j);
if(tagStop(Character.toString(c))){
break;
}
}
}
}
}
private static boolean tagStart(String check){
if(check.equals("<")){
return true;
}else{
return false;
}
}
private static boolean tagStop(String check){
if(check.equals(">")){
return true;
}else{
return false;
}
}
次のようなもの:
pageSource.replaceAll(">.*<", "><");
始める必要があります。