繁体   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