0

コードはありますが、次のエラーが発生する理由がわかりません。

    Warning: preg_match(): Unknown modifier '<'

これがスニペットです

    $pattern = "/<tr.*?data-eventid=\"(\d+)\"/" .               // id
    "<td.*?>\s{0,}.*\s(.*?)<div.*/?>\s(.*?)<\/td>\s{0,}" .     // Day and Date
    "<td.*?>(.*?)<\/td>\s{0,}" .                               // Time
    "<td.*?>(.*?)<\/td>\s{0,}" .                               // Currency
    "<td.*?>\s{0,}<div.*?>(.*?)<\/div>\s{0,}<\/td>\s{0,}" .    // Impact
    "<td.*?>\s{0,}<div.*?>(.*?)<\/div>\s{0,}<\/td>\s{0,}" .    // Indicator
    "<td.*?>\s{0,}<div.*?>(.*?)<\/div>\s{0,}<\/td>\s{0,}" .    // Detail
    "<td.*?>\s{0,}(.*?)\s{0,}<\/td>\s{0,}" .                   // Actual
    "<td.*?>(.*?)<\/td>\s{0,}" .                               // Forecast
    "<td.*?>(.*?)<\/td>\s{0,}".                                // Previous
    "<td.*?>\s{0,}<div.*?>(.*?)<\/div>\s{0,}<\/td>\s{0,}/ims"; // Chart 忽略

私はその<記号をどこで探すべきかとても混乱しています..

よろしくお願いします

4

2 に答える 2

2

まず、真剣に、うわー。これは、私が最悪の敵に投げかけるような正規表現ではありません。

"/<tr.*?data-eventid=\"(\d+)\"/"
                              ^

"<td.*?>\s{0,}.*\s(.*?)<div.*/?>\s(.*?)<\/td>\s{0,}"
                             ^

これらは区切り文字として使用されるため、エスケープする必要があります。それらをエスケープしないpregと、式が終了したと見なされ、末尾の文字が修飾子として扱われます。

ただし、適切な HTML パーサーを実際に調べる必要があります。これは狂気です!

以下も参照してください。DOMDocument

于 2012-12-14T06:42:28.577 に答える
1

最初の行: $pattern = "/<tr.*?data-eventid=\"(\d+)\"/" .

する必要があります

$pattern = "/<tr.*?data-eventid=\"(\d+)\"\/" .

于 2012-12-14T06:42:21.483 に答える