2011-05-27 116 views
3
/\n\s*\n/s 

我認爲,這意味着這個正則表達式是什麼意思?

  • 新行
  • 後跟0或多個空格
  • 那麼新線

這是否正確?如果不是,你能解釋一下嗎?

+0

你正在使用什麼正則表達式解析器?哪種語言和/或哪個庫?您可能需要添加一些關於該標籤的標籤。 – Roalt 2011-05-27 17:32:30

+0

@Roalt,我已經有PHP標記,但我想有人刪除它。將它添加回來。 – sameold 2011-05-27 18:14:18

回答

8

幾乎正確:\s實際上是指「任何空格字符」,其中還包括製表符和可能的CR/LF(\r\n)。

如果您正在使用的perl,\s可搭配一些其他字符太(從perlre):

如果Unicode是有效, 「\ s」 匹配也由 「\ x {85}」,「\在開始○×{2028},和 「\ X {2029}」

一對夫婦更澄清。

  • 由於匹配未錨定(^ r $),大多數引擎將這個表達式視爲意味着該字符串可以匹配任何字符串內的任何地方。換句話說,正則表達式/cat/將匹配「cat」,「caterpillar」或「concatenate」。所以你的字符串需要包含你所描述的內容,但是可以用其他的前綴或後綴。
  • /s最後通常意味着將整個字符串視爲一條巨大的線條。再次,來自perlre:

將字符串視爲單行。也就是說,改變「。」以匹配任何字符,甚至是一個通常不匹配的換行符。

「/ s」和「/ m」修飾符都覆蓋$ *設置。也就是說,無論$ *包含什麼,沒有「/ m」的「/ s」都會強制「^」只匹配字符串的開頭,而「$」只匹配最後一行(或者在換行符之前字符串的結尾)。如同/ ms一樣,他們讓「。」匹配任何字符,同時仍然允許「^」和「$」分別匹配字符串中的換行符之後和之前。

+0

如果您使用的是PHP,請對Bug非常謹慎:http://core.trac.wordpress.org/ticket/11528 – 2011-05-27 17:34:03

1

錯了。 \s是任何空格字符,不只是空格。

1

你的假設大多數是正確的,只有一個改變和一個遺漏。

首先,正如其他人所說,\s意味着任何空白,而不僅僅是「空間」。

此外,尾部s表示正則表達式處於「單線模式」,這意味着.(點)將匹配換行符。換句話說,你傳遞給這個正則表達式的任何東西都會被解析,就好像它是一行輸入一樣,不管它是否有換行符(它們將只是另一個特殊字符,如\n\r)。

相關問題