我需要刪除字符串中的所有空格,但引號應該保持原樣。刪除空白字符,除了PHP中的引號?
下面是一個例子:
string to parse:
hola hola "pepsi cola" yay
output:
holahola"pepsi cola"yay
任何想法?我確信這可以用正則表達式完成,但任何解決方案都可以。
我需要刪除字符串中的所有空格,但引號應該保持原樣。刪除空白字符,除了PHP中的引號?
下面是一個例子:
string to parse:
hola hola "pepsi cola" yay
output:
holahola"pepsi cola"yay
任何想法?我確信這可以用正則表達式完成,但任何解決方案都可以。
我們可以匹配字符串或報價與
[^\s"]+|"[^"]*"
所以我們只需要preg_match_all
和串聯的結果。
$str = 'hola hola "pepsi cola" yay';
preg_match_all('/[^\s"]+|"[^"]*"/', $str, $matches);
echo implode('', $matches[0]);
// holahola"pepsi cola"yay
馬爾蒂,復活這個問題,因爲它有一個簡單的解決方案,可以讓你一氣呵成,無需破滅替換。 (發現你的問題而做一些研究的一般問題有關how to exclude patterns in regex)
下面是我們簡單的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...
能雙引號引號之間的逃脫,或者是一個非(例如,應該「hola hola」百事可樂「yay」變成「holahola」百事可樂「yay」或「hola hola」百事可樂「yay」)? – Wrikken 2010-09-29 21:08:50