2010-12-05 19 views
0

私は、処理スケッチでHTMLファイルを解析しようとしている初心者です。 (ちなみに、あなたがProcessingを知らないのであれば、それはJavaにコンパイルされ、同じregex関数を使用します)。 SimpleMLを使用してHTMLファイルを単一のStringとして正しくキャプチャしました。私は(「name」を落とす)配列に候補者の名前を解析したい処理スケッチでregexのヘルプ?

<th>Name</th> 
    <th>John F. Kennedy</th> 
    <th>Lyndon Johnson</th> 
    <th>Richard Nixon</th> 

など

:そうのように、私は捕獲しようとしているデータは、表から来ています。

だから私は、最初のリスト全体を返さ

candidates = match(rawString,"<th>.*</th>"); 

を試してみました。

は、その後、私は唯一の

<th>Name</th> 

処理のマニュアルを返し

candidates = match(rawString,"<th>.{1,50}</th>"); 

をしようとしたと言う:

正規表現で(括弧のセットで指定された)グループがある場合、それぞれの内容が配列に返されます。正規表現マッチの要素[0]は一致する文字列全体を返し、マッチグループは要素[1](最初のグループは[1]、2番目の[2]など)から始まります。

だから今、私は次のように、グループや数量の様々な組み合わせをしようとしてきた:

candidates = match(rawString,"(<th>.{1,50}</th>)*"); 

しかし、何も作業していないので、私は、届かない、いくつかの概念的な作品がなければなりません。これは簡単だね、そう?

+0

オーケー抗正規表現とHTMLで群衆 –

答えて

1

通常、正規表現でHTMLを解析するのは良い考えではありませんが、ここでそれを知ることができます。

あなたの問題は、.*と貪欲に一致しているようです。 e。できるだけ多くの文字を入力することで、最初の文字列<th>から最後の文字列</th>までをすべて一致させることができます。

怠け者になってしまった。 e。

<th>.*?</th> 

はおそらく動作します:できるだけ一致するように数量詞を伝えることは一つの解決策です。

もう少し安定しており、最小限の高速化:例えば、一致することができます正確に何をエンジンに教える:

<th>[^<>]*</th> 

[^<>]は「角括弧を除く任意の文字」を意味します。

ネストされた構造を正規表現と照合しようとすると問題が発生します。現代の正規表現のフレーバーで行うことができますが、正しく行うのは非常に難しいです。ミックスにHTMLコメントと文字列を追加します(これはあなたがマッチングしている区切り文字を含んでいる可能性があります)。

+0

のためにブレーシング、私は+ HTML =トラブルはRegexコミュニティからのセンスを取得しています。では、より良い方法は何でしょうか? – James

1

式を複数回一致させると予想される場合は、おそらくmatchAllメソッドが必要です。 matchはあなたのパターンが一度一致することを期待しているので、最初に見つかった結果のみを返します。

http://www.processing.org/reference/matchAll_.html

+0

これはジェームズが直面しているより顕著な問題であるようです。 –

関連する問題