我想在SQLite查询的每个ORDER BY子句之前插入一个"COLLATE NOCASE"。这就是我目前所拥有的:
$string = preg_replace('~(ORDER's+BY's+`?.+`?)'s+([ASC|DESC]?)~iU', '$1 COLLATE NOCASE $2', $string);
输出为:
选择`x`,`y`FROM`test`ORDER BY `x`COLLATENOCASE ASC,`z`ASC限制0,10
匹配并替换第一个实例。第二个实例没有被替换(因为模式中有ORDERBY子句)。
将正则表达式更改为:
$query = "SELECT `x`, `y` FROM `test` ORDER BY `x` ASC, `z` ASC LIMIT 0, 10";
$query = preg_replace('~(ORDER BY|,)('s+'S+)'s+(?=ASC|DESC)~iU', ' $1$2 COLLATE NOCASE ', $query);
echo $query,"'n";
输出:
SELECT `x`, `y` FROM `test` ORDER BY `x` COLLATE NOCASE ASC, `z` COLLATE NOCASE ASC LIMIT 0, 10