我正在尝试替换多行的SQL语句中的最后一个FROM。
我最接近解决方案的是下面的例子。
let add_to_list (my_list : string list) =
let new_list = my_list @ ["somevalue"] in
print_list(new_list)
然而,这不起作用。它仅在字符串/查询只有一行(没有换行符)时才有效。我得到的输出如下。
$str = "SELECT *,
(SELECT COUNT(company.id) FROM company WHERE 1 = 4) as calc_field
FROM company
WHERE id = '09401293481-23-12'";
//preg_match("/(FROM (?!.*FROM))/m", $str, $matches);
//print_r($matches);
$str = preg_replace("/(FROM (?!.*FROM))/m", " REPLACEDFROM ", $str);
echo $str;
echo "\n\n";
但是,我应该得到的输出,或者我想得到的输出如下所示。
SELECT *,
(SELECT COUNT(company.id) REPLACEDFROM company WHERE 1 = 4) as calc_field
REPLACEDFROM company
WHERE id = '09401293481-23-12'
如何修改正则表达式以获得所需的结果?
谢谢!
答案 0 :(得分:0)
$str = preg_replace("/(\\bFROM\\b(?![\\s\\S]*\\bFROM\\b))/m", " REPLACEDFROM ", $str);
将.
更改为[\s\S]
以匹配newlines
以及.
默认不会这样做。请参阅演示。
答案 1 :(得分:0)
这种最简单的方法是使用贪婪和\ K结构 除了是最简单的方式,它是最快的方式 可以做到。有些人不关心表现。
只需使用(?s).*\K\bFROM\b