困惑在哪里寻找<符号

时间:2012-12-14 06:36:29

标签: php regex preg-match syntax-error symbols

我有一个代码,但我无法弄清楚为什么它给我一个错误:

    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 忽略

我很困惑在哪里寻找那个&lt;符号..

最好的问候

2 个答案:

答案 0 :(得分:2)

首先,严肃的,哇。这不是我对我最大的敌人的正常表达。

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

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

那些需要被转义,因为它们被用作分隔符。不转义它们会使preg认为表达式结束,尾随字符将被视为修饰符。

你应该真正研究一个合适的HTML解析器,这很疯狂!

另请参阅:DOMDocument

答案 1 :(得分:1)

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

应该是

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