php preg_replace 正则表达式替换两个字符串之间的字符串

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);

有人能帮帮我吗?

非常感谢

V

你不需要在这里使用环顾四周。可以写成

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

替换为:

Regex Demo

测试

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

更新:

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

只需将匹配的 ; 替换为 :

DEMO

字符串替换呢?

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

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

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

通过 : 尝试 this.Replace。查看演示。

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

一个简单易懂的解决方案可能是使用 preg_replace_callback:

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

"[^"]+" 将引用的内容捕获到 $m[0],其中 ;:

替换

See test at eval.in(link即将过期)