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 回答