2012-02-15 14 views
1

このページの「http://www.rottentomatoes.com/movie/box_office.php」でlynxコマンドを使用してプログラムを作成しようとしています。特定の問題....それだけでタイトルを取得します。私の問題は、タイトルには特殊文字や数字を入れることができ、すべてのタイトルは長さが変わることです。私は、ページ全体を解析し、このような行を見つけることができる正規表現を書いてみたいです.... (タイトルと次の番号の間にスペースを追加しました。リリース)正規表現解析の問題

1 -- 30% The Vow           1 $41.2M $41.2M $13.9k 2958 
2 -- 53% Safe House          1 $40.2M $40.2M $12.9k 3119 
3 -- 42% Journey 2: The Mysterious Island     1 $27.3M $27.3M $7.9k 3470 
4 -- 57% Star Wars: Episode I - The Phantom Menace (in 3D) 1 $22.5M $22.5M $8.5k 2655 
5 1 86% Chronicle           2 $12.1M $40.0M $4.2k 2908 

私が出始めている正規表現は次のとおりです。

/(\d+)\s(\d+|\-\-)\s(\d+\%)\s 

誰かが私をはるかに高く評価されるだろうに成功タイトルをつかむ方法を見つけ出す手助けができれば!ありがとうございました。

+2

ページを解析するために、あなたの割り当てた、またはページを解析する正規表現を書くこと?前者の場合は、正規表現の代わりにDOMライブラリを使用することを検討する必要があります。 – Borealid

+0

これを行うには正規表現を使用していますか?データはすでに正当化されているので、適切な列を切り捨ててトリム関数を適用するだけではどうですか? – VeeArr

+0

私はあなたに完全に同意しますが、割り当てはlynxコマンドを使用してすべての情報を解析することです=/ – Trance339

答えて

2

すべてのものをキャプチャします。

^(\d+)\s+(\d+|\-\-)\s+(\d+\%)\s+(.*)\s+(\d+)\s+(\$\d+(?:.\d+)?[Mk])\s+(\$\d+(?:.\d+)?[Mk])\s+(\$\d+(?:.\d+)?[Mk])\s+(\d+)$ 

はの説明:

^       <- Start of the line 
    (\d+)\s+     <- Numbers (captured) followed by as many spaces as you want 
    (\d+|\-\-)\s+   <- Numbers [or "--"] (captured) followed by as many spaces as you want 
    (\d+\%)\s+    <- Numbers [with '%'] (captured) followed by as many spaces as you want 
    (.*)\s+     <- Anything you can match [don't be greedy] (captured) followed by as many spaces as you want 
    (\d+)\s+     <- Numbers (captured) followed by as many spaces as you want 
    (\$\d+(?:.\d+)?[Mk])\s+ <- "$" and Numbers [with floating point] and "M or k" (captured) followed by as many spaces as you want 
    (\$\d+(?:.\d+)?[Mk])\s+ <- "$" and Numbers [with floating point] and "M or k" (captured) followed by as many spaces as you want 
    (\$\d+(?:.\d+)?[Mk])\s+ <- "$" and Numbers [with floating point] and "M or k" (captured) followed by as many spaces as you want 
    (\d+)     <- Numbers (captured) 
$       <- End of the line 

をだからこれは私がやったことです深刻であることを、私は(私はあなたが最後にやると思うと)ビットを騙して、すべてを捕獲しましたタイトルのキャプチャのための先読みを取得します。

非貪欲な正規表現(.*) [または、 "ungreedyness"を強制したい場合は] (.*?)は可能な限り少ない文字を捕捉し、正規表現の終わりは他のものをすべて捕まえようとします。

あなたの正規表現は、タイトル(唯一残されたもの)だけをキャプチャしてしまいます。

あなたができることは、実際の先読みを使用してアサーションを作成することです。


資源:

+0

それは間違いなくラインのすべてのものをつかむことに取り組んだ!助けてくれてありがとう! – Trance339

+0

私は正規表現自体を与えずに正規表現を説明する簡単な方法はないと思っているので、ほとんどの作業(割り当て)をしました。しかし、あなたは説明を読んで、あなたはregular-expresspressions.infoリンクを読むことを望みます(それはとにかく面白いです)。 –

+0

これを取得することは、割り当てのほんの一部です。私が書いた正規表現は、タイトル全体を取得する方法を理解する上で問題があっただけです。これは私の2番目の正規表現の割り当てなので、それをすべて理解しようとしています。 – Trance339