[英]PHP Replace Last Occurence of a Word in a Multi-Line String
我试图替换多行SQL语句中的最后一个FROM。
下面是我与解决方案最接近的示例。
$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'
但是,我应该获得或想要获得的输出如下所示。
SELECT *,
(SELECT COUNT(company.id) FROM company WHERE 1 = 4) as calc_field
REPLACEDFROM company
WHERE id = '09401293481-23-12'
如何修改正则表达式以获得所需的结果?
谢谢!
$str = preg_replace("/(\\bFROM\\b(?![\\s\\S]*\\bFROM\\b))/m", " REPLACEDFROM ", $str);
改变.
到[\\s\\S]
以匹配newlines
以及.
默认情况下不会这样做。请参阅演示。
最简单的方法是使用贪婪和\\ K构造。
除了是最简单的方法,它还是最快的方法
可以做到。 有些人不在乎性能。
只需使用(?s).*\\K\\bFROM\\b
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.