2012-06-15 128 views
0

我是新來的正則表達式, 誰能幫我出這行說的話:解釋這個正則表達式

$body = preg_replace('/\s{6,}/ms','',$body); 

在此先感謝。

+0

'\ s {6,}'表示六個以上的空格字符...... –

回答

1

它刪除至少6個連續的空白字符的情況。

\ S - 白空間

定義爲(水平)選項卡,空間,換行,回車或換頁。

圖案改性劑是無用順便說一句:

  • m改變的^
  • s使得.匹配換行符以及行爲和$;否則它會在行結束時停止。
+0

這意味着如果有超過6個連續的空格,那麼它將起作用,如果小於6,則不起作用。對? –

+0

它總是有效。如果有6個以上的空格,它會清除它們。如果沒有,它什麼都不會做。 – m0skit0

+0

@ m0skit0不只是空格,還有水平製表符,換行符,回車符和表單提要 –

0

基本上它的說法是用六個空格連續替換任何東西。

\s = space 
{6,} = between 6 and (since the second number after the comman is blank) 6 
\ms = Used together, as /ms, they let the "." match any character whatsoever, while still allowing "^" and "$" to match, respectively, just after and just before newlines within the string. 

另外偷看perldoc for perl regular expressions可能對未來有所幫助。

+0

由於這是PHP,所以不應鏈接到Perl的正則表達式文檔。你也沒有指定什麼6+空格被替換:) – m0skit0

+0

@ m0skit0我知道這是PHP,但它使用preg使用PCRE模式匹配系統(Perl Compatible Regular Expressions) –

+0

我也知道,但PCRE,儘管名稱,[不是Perl的正則表達式](http://en.wikipedia.org/wiki/Pcre)。 – m0skit0

2
$body = preg_replace('/\s{6,}/ms','',$body); 

替換空間(\s),其發生6〜未定義倍({6,})什麼也沒有。做這個多行。 (/m)。 s可能會被刪除,但當您不使用「全部字符」字符(.)時,它不會添加任何值。

+1

\ s不只是空格;多行修飾符是無用的btw –

+0

你能解釋爲什麼多行修飾符是無用的嗎? '$ body'不能包含多字符串? – m0skit0

+0

@ m0skit0嗯,它可能是多行的,但它仍然只能替換連續6個或更多的空格。 –