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