我需要从字符串中删除所有空格,但引用应保持不变。
以下是一个例子:
string to parse:
hola hola "pepsi cola" yay
output:
holahola"pepsi cola"yay
有什么想法吗?我确信这可以用正则表达式完成,但任何解决方案都没问题。
答案 0 :(得分:6)
我们可以将字符串或引号与
匹配[^\s"]+|"[^"]*"
所以我们只需要preg_match_all
并连接结果。
$str = 'hola hola "pepsi cola" yay';
preg_match_all('/[^\s"]+|"[^"]*"/', $str, $matches);
echo implode('', $matches[0]);
// holahola"pepsi cola"yay
答案 1 :(得分:2)
Martti,恢复了这个问题,因为它有一个简单的解决方案,让你可以一次性替换 - 不需要内爆。 (在针对how to exclude patterns in regex的一般性问题进行一些研究时找到了您的问题。)
这是我们简单的正则表达式:
"[^"]*"(*SKIP)(*F)|\s+
交替的左侧匹配完成"quoted strings"
然后故意失败。右侧匹配空格字符,我们知道它们是正确的空格字符,因为它们与左侧的表达式不匹配。
此代码显示了如何使用正则表达式(请参阅online demo底部的结果):
<?php
$regex = '~"[^"]*"(*SKIP)(*F)|\s+~';
$subject = 'hola hola "pepsi cola" yay';
$replaced = preg_replace($regex,"",$subject);
echo $replaced."<br />\n";
?>
参考
How to match (or replace) a pattern except in situations s1, s2, s3...