我已经在SO上找到了类似于我当前需求的答案,但是我仍然试图根据规则来修改字符串,除了在这些字符串中的某些外壳中。
我现在想要完成的例子:
preg_replace("/\s*,\s*/", ",", $text)
我在很多地方找到了上述内容。它将删除字符串中所有逗号之前和之后的空格。
这很有效。但是,如果我想排除在“”中找到的修改逗号,我不确定该规则是如何修改的。
有任何帮助吗?谢谢!
编辑:我想澄清一下我的问题: 除了在双引号或单引号中找到逗号外,我希望删除下一句中逗号之前和之后的所有空格:a, b , c "d, e f g , " , h i j ,k lm,nop
预期结果:
a,b,c "d, e f g , ",h i j,k lm,nop
答案 0 :(得分:2)
$text = '"a" , " , b"';
$result = preg_replace("/(?<=\")\s*,\s*(?=\")/", ",", $text);
var_dump($result);
但是当你有这样的事情时它会失败:" , "
- 用逗号括起来但没有任何其他字符的空格
答案 1 :(得分:1)
我认为这可能有效(它取代了“/”之外的空格,但不包括那些空格中的空格):
function yourFunction($string) {
$arr = explode('"',str_replace(' ','@',$string));
if (preg_match('~^("|\')~',$string)) {
foreach ($arr as $key=>$value) {
if (($key % 2) != 0) {
$arr[$key] = preg_replace('~\s*,\s*~',',',str_replace('@',' ',$value));
}
}
} else {
foreach ($arr as $key=>$value) {
if (($key % 2) == 0) {
$arr[$key] = preg_replace('~\s*,\s*~',',',str_replace('@',' ',$value));
}
}
}
$newString = implode('"',$arr);
$newString = str_replace('@',' ',$newString);
return $newString;
}
@是空格的占位符。 (所以没有空格可以丢失,我不知道为什么我这样做,我只知道我没有那个问题)
“if(preg_match”-construct检查你的字符串是否以“/”oder开头,而对于foreach中的逻辑,是否为其他。
如果字符串以“/”开头,则每个第二个条目在2“/”之内,否则为其他条目。
希望这就是你要找的东西