私はウェブサイトから複数のイベントを取得しようとしています。イベントは、正規表現はオプションのサブグループの一部です
... EVENT TITLE & LINK ... START DATE ... END DATE ... <span class="location">LOCATION</span> ...
の正規形式です。ここで、 "..."は、スタイル情報と改行を含むいくつかのhtmlタグです。これらのイベント文字列からLINK、START DATE、END DATE、LOCATIONを抽出したいと思います。周囲のhtmlコード「...」の形式は完全に規則的であるので、4つの情報をつかんことは容易で十分です:私は、周囲のタグが一致し、私が欲しいの部分、例えば抽出:
'|...<abbr class="dtstart">(.{10}).*?</abbr>...|s'
"(。{10})"は開始日です。いくつかのイベントは、他のものはなしで記載されている、位置が記載されているので、いくつかのイベントスパンタグ<スパンクラス=「位置」> LOCATIONに< /スパン>が他に存在するように
問題は、場所ですそれは単に失われています。
私の質問は:
どのように私はLOCATIONに一致することができますか?
私は場所ずにイベントに
preg_match_all('|...<span class="location">(.+?)</span>...|s', $contents, $matches, PREG_SET_ORDER);
をしようとすると、そのイベントと一致していません(ただし、私は1つを持っているイベントのための場所を取得します)。一方、私はどのイベントに
preg_match_all('|...(?:<span class="location">(.+?)</span>)...|s', $contents, $matches, PREG_SET_ORDER);
をしようとすると、そのコードは、すべてのイベントに一致しますが、場所は - それが存在する場合であっても - 私の$の試合の一部ではありません。
したがって、通常のオプションの部分文字列の不規則な部分とどのように一致させることができますか?
ありがとうございました! (zigdonによって質問への答えとして)
編集:
問題は場所が他のイベントデータにマッチしなければならないことです。私が結果として望むものであると想像してみましょう: "4月7日から4月10日、ベルリン"と "オンラインチュートリアル(ウェブサイトへのリンク、5月9日)" Regex協会(ウェブサイトへのリンク)。最初のイベントの場所は、タイトル、リンク、日付と一致させる必要があります。イベントを取得したいページへのリンクです。問題を理解するためにソースコードを参照できます。https://www.fs-psycho.uni-tuebingen.de/events/previous - 現時点では私は
preg_match_all('|<dt class="vevent">\s*?<span class="summary">\s*?(<a href=".+?</a>)\s*?</span>\s*?<span class="documentByLine">\s*?<span>(?:von)?<abbr class="dtstart" title=".{0,30}">(.{10}).{0,6}</abbr>.{5,100}<abbr class="dtend" title=".+?">(.{0,10}).{5,6}</abbr></span>\s*?(?:<span>— <span class="location">(.*?)</span>,</span>)?\s*?</span>\s*?</dt>|', $contents, $matches, PREG_SET_ORDER);
これは動作しますが、(私自身のないサイトからの)「野生コード」できたもので、答えで述べたように、ので、私は、それに不満を持っていて、イベントをつかみますタグの間に起こる。私は、イベント部分のすぐ周囲にのみ一致し、非常に開いているもの、つまり "。*?| s "
なぜ通常、本当に悪いアイデアをHTMLを解析するために正規表現を使っていますか? –
@what RegExはデータ内の繰り返し/予測可能なパターンを照合するために設計されているため、HTMLやXMLなどのフォーマットは単純な予測可能なパターンで構成されているわけではありません。 –
それには過小評価されているトピックがあります。[正規表現でXMLとHTMLを解析するのが難しい理由のいくつかの例を提供できますか?](http://stackoverflow.com/questions/701166/can-you-provide-some -examples-of-is-is-is-parse-xml-and-html-a-reg) –