2016-04-22 6 views
0

によって分離してもしなくてもよい単一の単語を一致させます'と' helloword 'を異なる変数に置き換えます。ここまでは順調ですね。キャッチすることは、入力のどこにでも空白が存在する可能性があることです。これにより、タスクが大幅に難しくなり、自分の能力から外れます。私は多分正規表現を使用すると思ったが、私は1つを働かせることができなかったし、トピックに関する私の研究は結果をもたらさなかった。だからこそ、これを行うための巧妙な方法は何でしょうか?Javaは、私は、以下の入力を読み取るプログラムを作成する場合、またはスペース

例:

<\s*(\w+)\s+value\s*=\s*"(\w+)"\s*content\s*=\s*"(\w+)"\s*\/\s*> 

これは、あなたが例とリターンとして与えた文字列全体にマッチします:

< rep eat va lue=" 2" conte nt= "helloworld"/> 

すべての可能な間隔をカバーするために、この正規表現を使用し

repeat, 2, helloworld 
+2

これは? [DEMO](https://regex101.com/r/vE2xQ6/1) –

+5

正確に何を検索しますか?(?<= <)(\ w +)| \ w +タグの名前とその属性の値おそらく、XMLパーサーを使用すると恩恵を受けます。 – Aaron

+0

https://regex101.com/r/hU0eE2/1 – rock321987

答えて

1

をマッハタグ(第1グループ)、価値(第2グループ)、コンテンツ(第3グループ)を含む。

Test it online at regex101.com


更新:

もキーワードvaluecontent内部のスペースは、あなたは、単に\s*を追加することができますできるようにするには(ゼロを含む空白文字の任意の数を、一致した)すべての間手紙:

<\s*(.+)\s+v\s*a\s*l\s*u\s*e\s*=\s*"(\w+)"\s*c\s*o\s*n\s*t\s*e\s*n\s*t\s*=\s*"(.+)"\s*\/\s*> 

Test it online at regex101.com

+0

@ByteCommanderに感謝します。しかし、私たちはそれをさらに進めていくことができます。一致する単語に空白があっても一致させることができます。私の質問をより明確にするために編集する。 – Alex

+0

@Alexすべての文字の間に '\ s *'を追加できます。私の答えを更新しました。それがあなたの質問を解決するならば、それを受け入れることを忘れないでください。 –

0

DOMパーサを使用することをお勧めします(例:Jsoup)。 もちろん、入力は有効なxml/htmlにする必要があります

package com.example; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.select.Elements; 

public class AttributesReader { 
    public static void main(String[] args) throws Exception { 
     String xmlStrMessage="<repeat value=\"2\" content=\"helloworld\"/>"; 
     Document doc = Jsoup.parse(xmlStrMessage); 
     Elements repeat = doc.select("repeat"); 
     System.out.println("value:"+repeat.attr("value")); 
     System.out.println("content:"+repeat.attr("content")); 
    } 
} 
関連する問題