2012-02-07 22 views
1

私は2つの別個の正規表現(Java)を使って名前と値を抽出する必要があるhtml入力要素を持っています。正規表現idと値を抽出する

<INPUT type="hidden" id="Region" value="Circuits Japan" checked="false"> 

2つの異なる正規表現を使用して上記のRegion and Circuits Japanを抽出する必要があります。 ID抽出のために

、私はこの.*id=(.[^"]+のようなものを使用)、私は唯一の「リージョン」を抽出しようとしているのに対し、それは私に

Region value=Circuits Japan checked=false> 

を与えます。 入力があれば幸いです。

+1

あなたの正規表現では、終わりの引用を探していますが、あなたの例では引用符はありません。どちらが正しい? –

+0

引用符なし。ごめんなさい。 –

+0

あなたの例には壊れたHTMLがあります。可能性のあるすべてのHTML文字列についてRegExを実際に解析することはできません。しかし、それが ''ならば、もちろん可能です。 – anubhava

答えて

0

まず、1つの正規表現を使用してhtmlの属性を解析するのは、属性の順序が異なる可能性があるためです。 複数のパスを実行する場合はそれほど難しくありません。 考えるとあなたが"を持っていないこと、その後idの正規表現は次のようになります。もちろん

id=(\\S+)

あなたがそのような複数の単語の属性を解析することはできません。そのような属性を正しく表すには、"が必要です。あなたは"周り、あなたが使用する必要があるとのマルチワード属性を持っていると仮定すると:

someAttribute=\\"([^"]+)

-1

:-)

乾杯あなたはhereがそれを使用する方法を示してブログで、Apacke Tikaを検討しています。

+0

ありがとう - しかし、これはまったく異なるコンテキストです。 –

1

特に指定のない限り、+オペレータは欲張りです...可能な限り一致することを意味します。あなたの場合、それは最後まで"に行くことを意味します。 +を貪欲なく一致させるには、次のように追加してください。?たとえば、

.*id=(.[^"]+?) 

あなたが期待している値を取得する必要があります。

2

入力要素があなたのコントロール下にある場合、あなたはあなたの属性値、すなわちのための引用符を使用する必要があります。

<INPUT type="hidden" id="Region" value="Cirvuits Japan" checked="false"> 

その後、使用:あなたが引用符をコントロールすることができない場合

Pattern p = Pattern.compile(" id=\"(.*?)\" value=\"(.*?)\""); 
Matcher m = m.matcher(inputString); 
if (m.find()) { 
    String id = m.group(1); 
    String value = m.group(2); 
    ... 
} 

だけで使用します。

Pattern p = Pattern.compile(" id=(.*?) value=(.*?) checked=") 
... 
関連する問題