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

php preg_replace regex替换字符串两个字符之间的字符,regex,preg-replace,Regex,Preg Replace,我不确定问两次问题是否正确。我已经问了以下问题,我找到了一个很好的解决办法。不幸的是,我发现了一个与此解决方案不兼容的组合。我试图修改解决方案,但没有成功。我还添加了一条评论,但似乎没有人评论这条评论,为什么我要再次问我的问题: 我想替换字符串中的一个字符,但前提是该字符介于其他两个字符之间。在我的情况下,我想取代所有;在双引号之间。 因此,我得到了一些示例字符串: 阿斯巴斯;“asd;”;自闭症;asdadasd;“asd;adsas” 阿斯巴斯;"建筑署:"建筑署";;asdadasd;as

我不确定问两次问题是否正确。我已经问了以下问题,我找到了一个很好的解决办法。不幸的是,我发现了一个与此解决方案不兼容的组合。我试图修改解决方案,但没有成功。我还添加了一条评论,但似乎没有人评论这条评论,为什么我要再次问我的问题:

我想替换字符串中的一个字符,但前提是该字符介于其他两个字符之间。在我的情况下,我想取代所有;在双引号之间。 因此,我得到了一些示例字符串:

阿斯巴斯;“asd;”;自闭症;asdadasd;“asd;adsas”

阿斯巴斯;"建筑署:"建筑署";;asdadasd;asd:adsas;塔拉斯;adass

“ASBA”;“asd:;a“sd”;“asdadasd”;“asd:adsas”;“塔拉斯”;“adass”

在我的最后一个问题()中,我得到了以下解决方案:

preg_replace ("/(\"[^\";]*);([^\"]*\")/m", "\\1:\\2", 
                   'asbas;"asd;";asd;asdadasd;"asd;adsas"' );
此解决方案非常有效,但仅在双引号发生率为eval的情况下有效。因此,第一个示例字符串非常有效,但第二个或第三个示例字符串无效

我还尝试了:

preg_replace_callback('/"[^"]+"/',
   function ($m) { return str_replace(";", ":", $m[0]); },
   $str);
为了澄清我的问题:我需要一个正则表达式来处理这两个示例字符串,并给出以下结果:

阿斯巴斯;“asd:”;自闭症;asdadasd;“asd:adsas”

阿斯巴斯;“asd::a”sd;asdadasd;asd:adsas;塔拉斯;adass

“asbas”;“asd::a”sd“;“ASDADADASD”;“asd:adsas”;“塔拉斯”;“adass”

仅当分号位于双引号之间时,才应进行替换

我非常感谢你的帮助和回答

问候

马库斯

编辑:
我问题的背景是csv文件的准备工作。有些组合甚至连excel都不知道如何“正确”处理文件。。。所以我试着改变一些字符并解释它,因为我知道文件应该是。。。因此,该列是一个“…”块,并用分号分隔。我想在双引号块之间更改als分号。。。问题是OcCurs如果在双引号块中也有一个“-字符”,所以我需要正则表达式,甚至在这个块中找到分号。

< P>可以使用<代码> PrggRePiest-CalbBoud()/<代码>和<代码> STRYRePACTE()/<代码>的组合。考虑下面的代码和解释:

<?php
$str = '"asbas";""asd::a"sd";"asdadasd";""asd:adsas";"taras";"adass"';
echo "$str\n";          // prints out the string
$regex = '/([^"]+)/i';
// captures every character EXLUDING a double quote
// case-insensitive, must be more/equal to 1 character

$str = preg_replace_callback($regex, 
    function($matches) {
        return str_replace(';', '', $matches[0]);
        // replaces every semicolon with '' in the captured group
    },
        $str
    );

echo "$str\n";
// output: "asbas"""asd::a"sd""asdadasd"""asd:adsas""taras""adass"
?>

嗨,简。谢谢你的回复。不幸的是,这并不能解决我的问题。你的解决方案删除了所有;我只想删除双引号之间的;。也许你可以比较一下我的预期结果。