簡體   English   中英

PHP替換多行字符串中單詞的最后一次出現

[英]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以及. 默認情況下不會這樣做。請參閱演示。

https://regex101.com/r/mG8kZ9/11

最簡單的方法是使用貪婪和\\ K構造。
除了是最簡單的方法,它還是最快的方法
可以做到。 有些人不在乎性能。

只需使用(?s).*\\K\\bFROM\\b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM