[英]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.