php preg_replace regex replace string在两个字符串之间

php preg_replace regex replace string在两个字符串之间,php,regex,replace,preg-replace,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('(?<=\"

我有以下问题:我想在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

您不需要在此处使用环视。它可以写成

("[^";]*);([^"]*")
替换为\1:\2

试验

更新:

只需更换匹配的;与:


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

("[^";]*);([^"]*")
替换为\1:\2

试验

更新:

只需更换匹配的;与:


替换字符串怎么样

str_ireplace(';";', ':";', $orig_string);
阿斯巴斯;建筑署:;自闭症;asdadasd;自闭症;阿德萨斯


替换字符串怎么样

str_ireplace(';";', ':";', $orig_string);
阿斯巴斯;建筑署:;自闭症;asdadasd;自闭症;阿德萨斯

尝试此操作。替换为:。请参阅演示

尝试此操作。替换为:。请参阅演示


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

[^]+捕获报价至$m[0]的内容,其中;替换为:


链接即将过期

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

[^]+捕获报价至$m[0]的内容,其中;替换为:


链接即将过期

两个文本之间的文本是否具有特殊意义?因此@nu11p01n73R的解决方案将无法正常工作,因为它没有考虑到,在第一部分中可能已经有了一个没有后续内容的解决方案;两个文本之间的文本是否是具有特殊意义的特殊文本?因此@nu11p01n73R的解决方案将无法正常工作,因为它没有考虑到,在第一部分中可能已经有了一个没有后续内容的解决方案;在编程中,一个问题没有一个解决方案,你给10个程序员一个问题,解决问题的方法会不同,但结果相同,但我看到你用不同的方法给出问题的解决方案,这让你大吃一惊。如果你的解决方案后面跟着一个分号和另一个分号,那么它只会替换一个分号,但示例中出现的第二个问题没有被替换,因为它遵循另一种模式。在编程中,一个问题没有一个解决方案,你给10个程序员一个问题,解决问题的方法将不同,结果相同,然而,我看到你用不同的方法给出了问题的解决方案,你的解决方案只替换了一个分号,如果它后面跟着一个和另一个分号,但是示例中的第二个出现没有被替换,因为它遵循另一种模式。:-没有错。如果不想,请将其还原回。。。不,不要那样做。这不是个好答案。这是正确的答案,因为如果引号中出现多个分号,您的将失败。太好了,最后一个分号对我有效,这正是我要找的!!非常感谢你。似乎我不像我想象的那样对所有正则表达式都那么熟悉;我试着用$1:$2来访问匹配项,而不是用双反斜杠。。。。谢谢!嘿,你的回答对我帮助很大,到目前为止效果还不错。。。我发现了一个可能的组合,其中此解决方案无法正常工作。。。我试图修改您的解决方案以运行所有变体,但没有成功。。如果您有以下字符串“asbas”;建筑署:;自闭症;asdadasd;asd:adsas“正则表达式替换全部”;在双关之前。。。我希望正则表达式什么也不做。它只应取代;在两个双引号内。所以我希望你能再次帮助我!非常感谢。:-没有错。如果不想,请将其还原回。。。不,不要那样做。这不是个好答案。这是正确的答案,因为如果引号中出现多个分号,您的将失败。太好了,最后一个分号对我有效,这正是我要找的!!非常感谢你。似乎我不像我想象的那样对所有正则表达式都那么熟悉;我试着用$1:$2来访问匹配项,而不是用双反斜杠。。。。谢谢!嘿,你的回答对我帮助很大,到目前为止效果还不错。。。我发现了一个可能的组合,其中此解决方案无法正常工作。。。我试图修改您的解决方案以运行所有变体,但没有成功。。如果您有以下字符串“asbas”;建筑署:;自闭症;asdadasd;asd:adsas“正则表达式替换全部”;在双关之前。。。我希望正则表达式什么也不做。它只应取代;在两个双引号内。所以我希望你能再次帮助我!非常感谢。
;(?=[^"]*"(?:[^"]*"[^"]*")*[^"]*$)
$str = preg_replace_callback('/"[^"]+"/',
       function ($m) { return str_replace(";", ":", $m[0]); },
       $str);