簡體   English   中英

php preg_replace regex 替換兩個字符串之間的字符串

[英]php preg_replace regex replace string between two string

我有以下問題:我想替換(在 php 中)一個特殊字符,但前提是它在其他兩個字符之間。 它試圖用 preg_replace 找到一個解決方案,但它不起作用。

我想更換每一個; 帶有 : 介於 " 之間的示例:

$orig_string= 'asbas;"asd;";asd;asdadasd;"asd;adsas"'

結果應該是:

'asbas;"asd:";asd;asdadasd;"asd:adsas"'

我嘗試了幾個正則表達式,但沒有任何成功......

我試過的兩個例子:

$result = preg_replace('(?<=\")(.*)(;)(.*)(?=\")',':', $str);

$result = preg_replace('.*\".*(;).*\"',':', $str);

有誰能夠幫助我?

非常感謝

你不需要在這里使用環顧四周。 可以寫成

("[^";]*);([^"]*")

替換為\\1:\\2

正則表達式演示

測試

preg_replace ("/(\"[^\";]*);([^\"]*\")/m", "\\1:\\2", 'asbas;"asd;";asd;asdadasd;"asd;adsas"' );
=> asbas;"asd:";asd;asdadasd;"asd:adsas"

更新:

;(?!(?:"[^"]*"|[^"])*$)

只需替換匹配的; :

演示

;(?=[^"]*"(?:[^"]*"[^"]*")*[^"]*$)

試試這個。替換為: 。見演示。

https://www.regex101.com/r/bC8aZ4/16

一個簡單易懂的解決方案可能是使用preg_replace_callback

$str = preg_replace_callback('/"[^"]+"/',
       function ($m) { return str_replace(";", ":", $m[0]); },
       $str);

"[^"]+"將引用的內容捕獲到$m[0] ,其中;被替換為:

在 eval.in 上查看測試(鏈接即將過期)

字符串替換呢?

str_ireplace(';";', ':";', $orig_string);

asbas;"asd:";asd;asdadasd;"asd;adsas"

暫無
暫無

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

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