php preg_replace regex替换两个字符串之间的字符串

时间:2015-01-27 11:46:09

标签: php regex replace preg-replace

我有以下问题:我想替换(在php中)一个特殊字符,但只有它在两个其他字符之间。它尝试使用preg_replace找到解决方案,但它不起作用。

我想替换每一个;用a:介于“ 例子:

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

结果应为:

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

我尝试了几个正则表达但没有任何成功......

我尝试了两个例子:

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

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

有人能帮助我吗?

非常感谢

V

4 个答案:

答案 0 :(得分:4)

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

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

替换为\1:\2

Regex Demo

<强>测试

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

<强>更新

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

只需将匹配的;替换为:

即可

DEMO

答案 1 :(得分:1)

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

试试这个。:。见。演示。

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

答案 2 :(得分:1)

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

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

"[^"]+"将引用的内容捕获到$m[0];替换为:

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

答案 3 :(得分:0)

字符串替换怎么样?

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

asbas; “ASD:”; ASD; asdadasd; “ASD; adsas”

相关问题