2011-03-15 76 views
1

我想要構建一個PHP字符串替換/正則表達式函數,它需要一個字符串與換行符和空格的任何序列,並將其替換爲單線進給。如何用一個換行符替換包含任何換行符和空格序列的字符串

這是可能的,如果是這樣,它將如何完成?

+0

你有一個輸入字符串的例子,你期望輸出看起來像什麼? – 2011-03-15 18:33:07

+1

任何空格和換行符序列都應該成爲一個換行符?空格=>換行? – 2011-03-15 18:35:45

回答

-1

試試這個:

http://www.regular-expressions.info/tutorial.html

大源材料!

+1

*是*一個很好的資源,但OP是問一個具體的問題,你沒有回答它。 – 2011-03-15 20:07:52

+0

我認爲這樣做很簡單,學習基礎知識。 – slezica 2011-03-15 21:34:54

+0

確實如此,但是這個答案的總體增加了多少值,無論是對於這個Q&A還是StackOverflow呢?特別是在這種情況下,該特定網站似乎每天至少推薦一次。 – 2011-03-15 22:36:45

1

你可以嘗試:

= preg_replace('/\s*[\r\n]+\s*/', "\n", $text); 

它會尋找出一個單一的CR或LF檢測Unix,Windows和舊的Mac換行符。之後,任何空格(空格,製表符,CR,LF)將被刪除。

  • 但是,我會刪除第一個\s*以忽略前一行的空格。
  • 如果您想保留\ tabs,最後的\s*也可以是[\r\n ]*

另請參見https://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world如果你想完善這個正則表達式。

1

如果空間/符可以來以任何順序和任何潛在的操作系統,那麼這將是一個試探性的方法:

$fixed_string = preg_replace('/[\s\n\r]+/', "\n", $bad_string); 

它會尋找一個或更多的空白(\ S) ,換行符(\ n)和回車(\ r)字符,並用換行符替換它們。

+1

在PHP中,'\ s'等同於'[\ t \ f \ r \ n]',所以正則表達式中的'[\ s \ r \ n]'可能只是'\ s'。另外,我認爲OP只想匹配其中至少有一個換行符的序列,並且您沒有執行該操作。 – 2011-03-15 19:54:11

+0

Marc B - 完美的作品。多謝!和艾倫摩爾,你是對的,我從這兩個解決方案得到的結果是相同的。 – Glenn 2011-03-17 14:37:19

+0

現在我需要找到一個解決方案,它將使用'\ n'替換所有空白區域,但只有在空白區域存在'\ n'時纔會使用'\ n'。我懷疑這不是一個正則表達式問題(但如果我錯了,請糾正我)。再次感謝您的幫助! – Glenn 2011-03-17 14:43:13

相關問題