正则表达式结束字符串问题

时间:2011-02-21 14:07:48

标签: php regex

我想匹配字符串中的最后一个“order by”(例如$ matches [1] = doo.time)我可以看到问题出在(.*)部分,但不知道要改变什么因为它需要任何角色,任何想法?

$sql = "SELECT foo FROM blah ORDER BY foo.date ORDER BY doo.time";

if (preg_match('/ORDER BY\s(.*)$/i', $sql, $matches)) {
    echo "<pre>";
    print_r($matches); exit;
}

2 个答案:

答案 0 :(得分:3)

你可以贪婪地匹配(不捕捉)它之前的一切。这将强制模式的其余部分仅匹配最后一个ORDER BY。这对我有用。

$sql = "SELECT foo FROM blah ORDER BY foo.date ORDER BY doo.time";

if (preg_match('/(?:.*)ORDER BY\s(.*)$/i', $sql, $matches)) {
    echo "<pre>";
    print_r($matches); exit;
}

答案 1 :(得分:2)

如果您只是在寻找列名,请尝试以下方法:

if (preg_match('/.*ORDER BY\s(.*?)(?:ASC|DESC)?\s*(?:LIMIT.*)?$/i', $sql, $matches)) {
    echo "<pre>";
    print_r($matches); exit;
}