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
你不需要在这里使用环顾四周。可以写成
("[^";]*);([^"]*")
替换为:
测试
preg_replace ("/(\"[^\";]*);([^\"]*\")/m", "\1:\2", 'asbas;"asd;";asd;asdadasd;"asd;adsas"' );
=> asbas;"asd:";asd;asdadasd;"asd:adsas"
更新:
;(?!(?:"[^"]*"|[^"])*$)
只需将匹配的 ;
替换为 :
字符串替换呢?
str_ireplace(';";', ':";', $orig_string);
asbas;"asd:";asd;asdadasd;"asd;adsas"
;(?=[^"]*"(?:[^"]*"[^"]*")*[^"]*$)
通过 :
尝试 this.Replace。查看演示。
一个简单易懂的解决方案可能是使用 preg_replace_callback:
$str = preg_replace_callback('/"[^"]+"/',
function ($m) { return str_replace(";", ":", $m[0]); },
$str);
"[^"]+"
将引用的内容捕获到 $m[0]
,其中 ;
被 :
替换
See test at eval.in(link即将过期)
我遇到以下问题:我想替换(在 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
你不需要在这里使用环顾四周。可以写成
("[^";]*);([^"]*")
替换为:
测试
preg_replace ("/(\"[^\";]*);([^\"]*\")/m", "\1:\2", 'asbas;"asd;";asd;asdadasd;"asd;adsas"' );
=> asbas;"asd:";asd;asdadasd;"asd:adsas"
更新:
;(?!(?:"[^"]*"|[^"])*$)
只需将匹配的 ;
替换为 :
字符串替换呢?
str_ireplace(';";', ':";', $orig_string);
asbas;"asd:";asd;asdadasd;"asd;adsas"
;(?=[^"]*"(?:[^"]*"[^"]*")*[^"]*$)
通过 :
尝试 this.Replace。查看演示。
一个简单易懂的解决方案可能是使用 preg_replace_callback:
$str = preg_replace_callback('/"[^"]+"/',
function ($m) { return str_replace(";", ":", $m[0]); },
$str);
"[^"]+"
将引用的内容捕获到 $m[0]
,其中 ;
被 :
See test at eval.in(link即将过期)