コード:
static short state = 0;
static int td_number = 0;
public static void main(String[] args) {
final Pattern p = Pattern.compile("^[\\s]*?\\d+\\.\\d+[\\s]*?");
final short TD_ENTRY = 0;
final short NO_ENTRY = 1;
HTMLEditorKit.ParserCallback callback = new HTMLEditorKit.ParserCallback() {
public void handleText(char[] data, int pos) {
switch (state) {
case NO_ENTRY:
break;
case TD_ENTRY: {
// We are in the right table column
// Create string from char array
String s = new String(data);
Matcher m = p.matcher(s);
boolean b = m.matches();
// Check if data information has correct format (0.0)
if (b) {
}
}
break;
default:
break;
}
state = NO_ENTRY;
}
public void handleStartTag(HTML.Tag tag, MutableAttributeSet set, int pos) {
if (tag == HTML.Tag.TD) {
//[...]
}
}
};
Reader reader = new StringReader(html);
try {
new ParserDelegator().parse(reader, callback, false);
} catch (IOException e) {
}
}
正規表現を使用して HTML を解析しようとしています。td
プログラムは、html テーブル内のタグの内容を読み取ります。テーブル セルのコンテンツは、 で定義された特別なパターンに適合する必要がありますPattern p
。
主な問題は、正規表現パターンがこの "0.1" のようなセル コンテンツに一致しないことです。しかしString s
、コードで値 (" 0.1") を使用して手動で定義すると、パターンが一致します。
さらにchar[] data
、デバッグ モードでの内容をコピーs
し、このコピーした内容で定義すると、上記の手動で定義した値と同じように見えますが、パターンも適合しません。
どの空白文字が実際に読み取られているかを調べることは可能ですか?
空白は常に空白であるとは限らないため、正規表現クラス [\s] と一致しないようです。これは可能ですか?
編集:
回答ありがとうございます。\s 正規表現クラスで認識されなかった空白文字 (\xA0) でした。
(本当にイライラする)反対票を投じた皆さんにとって、私の質問は単に私を誤解していました. おそらく問題は、「正規表現で HTML を解析したい」という文だったのかもしれませんが、実際には、未知の空白文字を含む HTML テーブル セルのコンテンツを持っているだけです ;-)。
jsoup のようなライブラリでも同じ問題が発生したと思います。