我有以下问题:我想替换(在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
答案 0 :(得分:4)
你不需要在这里使用环顾四周。它可以写成
("[^";]*);([^"]*")
替换为\1:\2
<强>测试强>
preg_replace ("/(\"[^\";]*);([^\"]*\")/m", "\\1:\\2", 'asbas;"asd;";asd;asdadasd;"asd;adsas"' );
=> asbas;"asd:";asd;asdadasd;"asd:adsas"
<强>更新强>
;(?!(?:"[^"]*"|[^"])*$)
只需将匹配的;
替换为:
答案 1 :(得分:1)
答案 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”