我不確定提問兩次是否正確。我已經問過以下問題,我找到了一個很好的解決方案。不幸的是,我發現了一種不適用於此解決方案的組合。我嘗試了很多修改解決方案,但我沒有工作。我還添加了一條評論,但似乎沒有人評論這條評論,爲什麼我不得不再次提出我的問題:php preg_replace正則表達式替換字符串中兩個字符之間的字符
我想替換字符串中的字符,但前提是此字符在兩個其他字符之間。在我的情況下,我想要取代所有;介於雙引號之間。 爲此我得到了一些例子字符串:
asbas; 「ASD;」; ASD; asdadasd; 「ASD; adsas」
asbas; 「ASD:;一」 SD; asdadasd;「ASD: adsas;塔拉斯;阿達斯
「asbas」; 「」 ASD:;一個 「SD」, 「asdadasd」; 「」 ASD:adsas 「;」 塔拉斯 「;」 阿達斯」
在我的最後一個問題(Question)我得到了以下解決方案:
preg_replace ("/(\"[^\";]*);([^\"]*\")/m", "\\1:\\2",
'asbas;"asd;";asd;asdadasd;"asd;adsas"');
這個解決方案很好用,但只有在這種情況下doublequot的出現是eval。所以第一個例子字符串很好,但不是第二個或第三個。
我也試過了:
preg_replace_callback('/"[^"]+"/',
function ($m) { return str_replace(";", ":", $m[0]); },
$str);
要clearify我的問題:我需要用兩個例子字符串工作,並給出如下結果的正則表達式:
asbas; 「ASD」 ; ASD; asdadasd; 「ASD:adsas」
asbas; 「ASD ::一個」 SD; asdadasd;「ASD:adsas;塔拉斯;阿達斯
「asbas」; 「」 ASD ::一個 「SD」, 「asdadasd」; 「」 ASD:adsas 「;」 塔拉斯 「;」 阿達斯」
的更換時,分號是隻應在雙引號之間。
非常感謝您的幫助和解答。
親切的問候
馬庫斯
編輯: 我的問題的背景是CSV-文件前的準備。這是一些組合,即使excel不知道如何處理文件「正確」...所以我嘗試改變一些字符並解釋它,因爲我知道文件應該是...所以該列是一塊「 ...「並用分號分隔。並且知道我想在雙引號之間更改als分號塊...如果在雙引號塊中還有一個「-character」,那麼我需要正則表達式,它甚至可以在此塊中找到分號
嘿,感謝您的答覆。不幸的是,這並不能解決我的問題。您的解決方案刪除每個我只想刪除;之間的雙引號......也許你可以比較我的預期結果。 –