2016-05-12 12 views
0

このhtmlスニペットから特定の値を抽出する必要があります。私は外部ライブラリを使用したくないので、コアJavaを使用してこれを実現する唯一の方法は正規表現を使用することです。私は正規表現を一度も使用していないので、整数値を以下の入力からどのように取得できるかを示せばそれは素晴らしいことでしょう。html出力からタグ間のコンテンツを抽出する正規表現

<tr><td>GLOBALID=123245</td></tr> 

GLOBALIDに割り当てられた整数値を抽出する必要があります。

+2

regexに慣れていない場合は、代わりに文字列演算を使用してください。 –

+1

必須のリンク:[RegExはXHTML自己完結型タグを除く公開タグと一致](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) – sleske

+2

「外部ライブラリを使用するのは好きではありませんが、本当にすべきです。本当にできない場合は、理由を説明してください。また、解析するHTMLのサンプルも含めてください。 – sleske

答えて

1
 String text = "GLOBALID=123245"; 
     Pattern p = Pattern.compile("GLOBALID=(\\d+)"); 
     Matcher m = p.matcher(text); 
     if (m.find()) { 
      System.out.println(m.group(1)); 
     } 
0

は、それがXMLだとそれが問題ではありません。プレーンな文字列として入力を処理し、あなたがreplaceAll()を使用して番号を取得できます。

String globalId = str.replaceAll("(?s)(?:.(?!GLOBALID))*(?:.GLOBALID=(\\d+))?.*", "$1"); 

これは、(入力全体にマッチする)正規表現でキャプチャグループと交換する用語でバックリファレンスを使用しています。

DOTALLフラグ(?s)は入力に埋め込み改行があっても機能します(ありがとう@Wiktor)。

便宜的に、オプションの(非キャプチャ)グループのために、グローバルIDが入力にない場合、結果は空白になります。

あなたはそれが常にあります確信している場合は、あなたがに正規表現を簡素化することができます

String globalId = str.replaceAll("(?s).*GLOBALID=(\\d+).*", "$1"); 

試合は簡単なトークンがある(ここでのように)、あなたは私が好きXML解析ライブラリを(避けることができます伝染病)。

+0

'replaceFirst'で十分です。より安全な正規表現は' "(?s)です。* GLOBALID =(\\ d +)。*" '。 –

+0

@WiktorStribiżew正規表現が入力全体と一致するとき、replaceAll/replaceFirstは同じです。 btwは、見つからないターゲットを処理するために更新された正規表現に注意してください。 – Bohemian

+0

入力全体についての興味深い事実ですが、問題は改行を含む入力全体と一致しないことが原因です。また、私はそのようなソリューションを投稿したとき、私は不必要にあまりにも複雑な正規表現のためにdownvotedされました。あなたは本当に欲張りな貪欲なトークンのような構造体 '(?:。(?! GLOBALID))*'をオプションのグループで使う必要はなく、 'GLOBALID ='の後に数字の塊を得るために量子タイプを混ぜる必要はありません。 –

関連する問題