我想用一個空格替換多餘的空格(連續空格字符的實例),只要這些額外的空格不是雙引號或單引號(或任何其他附件我可能要包括)。正則表達式字符串中的多餘空格不是雙引號或單引號 - PHP
我看到了一些類似的問題,但我找不到上面我的需求的直接回應。謝謝!
我想用一個空格替換多餘的空格(連續空格字符的實例),只要這些額外的空格不是雙引號或單引號(或任何其他附件我可能要包括)。正則表達式字符串中的多餘空格不是雙引號或單引號 - PHP
我看到了一些類似的問題,但我找不到上面我的需求的直接回應。謝謝!
希望你仍在尋找,或回來檢查!這似乎爲我工作:
'/\s+((["\']).*?(?=\2)\2)|\s\s+/'
...與 $1
編輯替換
另外,如果你需要允許轉義引號像\"
或\'
,你可以使用這個表達式:
'/\s+((["\'])(\\\\\2|(?!\2).)*?(?=\2)\2)|\s\s+/'
如果你想要一個dd支持「平衡」引號,如括號(例如()
或{}
)
編輯完
我們如果發現問題或想一些解釋我知道!
希望最後編輯和警告
/(?:^|\s+)((["\'])(\\\\\2|(?!\2).)*?(?=\2)\2)|\s\s+/
\s+
與(?:^|\s+)
在表達.
和\s
速記字符類來解決要匹配,如下所示:/(?:^|[ \t]+)((["\'])(\\\\\2|(?!\2)[\s\S])*?(?=\2)\2)|[ \t]{2,}/
例
This link示出了第一表達和最後一個表達式在樣本文本的使用對http://codepad.viper-7.com
你可以在幾個步驟中做到這一點。請看下面的例子:
$str = 'This is a string with "Bunch of extra spaces". Leave them "untouched !".';
$id = 0;
$buffer = array();
$str = preg_replace_callback('|".*?"|', function($m) use (&$id, &$buffer) {
$buffer[] = $m[0];
return '__' . $id++;
}, $str);
$str = preg_replace('|\s+|', ' ', $str);
$str = preg_replace_callback('|__(\d+)|', function($m) use ($buffer) {
return $buffer[$m[1]];
}, $str);
echo $str;
這將輸出字符串:
This is a string with "Bunch of extra spaces". Leave them "untouched !".
雖然這不是最漂亮的解決方案。
有趣的方法的例子。這會奏效,但在較大的琴絃上會變得相當沉重,並且演奏成爲我特別需要的關注點。當然,如果沒有「一條線」解決方案,那麼我將別無選擇! – Kovo 2012-04-09 14:48:00
字符串會發生什麼?'This string will __0'break you''? – 2012-04-09 16:37:42
這是刪除雙引號中的字符串的一部分。 - 這是一個「句子」不起作用 - 變成 - 這是行不通的 - – Kovo 2012-04-09 18:44:08
使用/ \ s +(([「\'])(\\\\ 2 |(!!\ 2)。 )*?(?= \ 2)\ 2)| \ s \ s +/ – Kovo 2012-04-09 18:44:28
@Kovo是否替換爲「$ 1」(即包含空格的字符串,後跟美元符號,後跟1?)如果是這樣的話,我不確定你的問題是不是 - 我仍然在想... – 2012-04-09 18:49:24