2017-10-09 89 views
1

這裏我有我的RegEx來代替whitespaces & newlines,用逗號替換空格和換行符

preg_replace('#\s+#',',',trim($str)); 

的代碼完全適用於以下情況

$str = " 
a 
b 
c 
"; 

但是,如果我寫的東西像

$str = " 
a, 
b, 
c 
"; 

$str = " 
a , 
b , 
c , 
"; 

我得到第一種情況a,,b,,c和在第二種情況a,,,b,,,c

我試過在preg_replace()之前使用strtr($str,',' => ''),但也沒有工作,我怎樣才能直接在preg_replace中處理這個問題?

我期望的輸出是所有的值是 a, b, c, . . . .如果他們有逗號,它會逃脫或者因爲它已經存在被刪除,清理和和,最終只有1逗號將它們分開。

+1

你的需求量是多少? – Philipp

+1

在完美的工作中,你應該得到',a,b,c, - 是你真正想要的嗎?正則表達式的事情是,他們期望有規律的東西 - 如果您的輸入不規則,RegExp可能不是最佳選擇。你究竟想達到什麼目的? – CD001

+0

@菲利普現在在問題結尾寫下它。 – AXAI

回答

1

我不是完全地肯定你的要求,但你可以嘗試這些

/[\s,]+$\n|[\s,]+/gm 

或只是

/[\s,]+/ 
+0

還給逗號用逗號分隔的空格 – AXAI

+0

@AXAI第二個沒有.. – Philipp

+0

其實第二個給了我逗號兩倍。 – AXAI

1

一個嘗試以下操作:

$arr = explode("\r\n", $str); 

array_walk($arr, function(&$item, $key) 
{ 
    $item = rtrim($item,','); 
    $item = trim($item); 
}); 

$result = trim(implode(',', $arr), ','); 


var_dump($result); 

它不是一個正則表達式解決方案,但它的工作原理。這將字符串轉換爲數組,刪除逗號和空格,然後將數組轉換回字符串並添加逗號。

+0

工作正常,但在性能的情況下,不會比平常的'preg_replace'花費更多時間嗎?但斯蒂爾的作品。 – AXAI

+1

@AXAI不一定,我運行了一些基準測試,結果表明我的解決方案比preg_replace更快。 https://3v4l.org/70LPZ在某些版本和某些'preg_replace'上速度更快。 – mega6382

相關問題