2013-04-13 56 views
9

舉一個例子,/[ ]{0,3}// {0,3}/有什麼不同?方形剎車片中的空間是否與空間不同?

+1

這些基本上是相同的,如果不與'(?x)'開關結合使用。 – Cylian

+0

@Cylian,你能詳細點嗎? –

+3

好問題,也有逃脫的空間'/ \ {0,3} /'和空格字符的十六進制表示'/ \ x20 {0,3} /' –

回答

13

可以有不同的含義,如果x修改標誌,允許在正則表達式記號之間的「自由空間」啓用(爲便於閱讀,並允許在正則表達式註釋)。但是如果這個設置沒有啓用,那麼兩者之間沒有功能上的區別。

請參閱本Regex Tutorial這個選項特別,它規定的詳細說明:

...自由間隔模式具有字符類中沒有任何影響。空格 和字符類中的換行符將包含在 字符類中。

此外,PHP特定權限,參見PHP手冊爲PCRE Pattern Modifiers其中指出:

X(PCRE_EXTENDED)如果設定了此修正,空白數據字符圖案中的 被完全忽略除了當逃跑或 字符類中...

另請參閱this other Regex Tutorial page on specifying modifiers解釋如何實現正則表達式的不同口味的修改。

改性劑標誌可以被包括在正則表達式本身作爲(?x)意思自由空間是從正則表達式該點使能向前到正則表達式的結尾(或至多閉合(?-x))。特別是用於PHP,改性劑標誌可以通過拖尾正則表達式例如(使用您的示例中的一個)/ {0,3}/x

方括號格式([ ])明確地表示文字空間不管設置的被施加到整個表達式,並海事組織是自我記錄;它非常明確地顯示了devoloper使用文字空間的意圖,可能優先於「\s」字符類(其中還包括製表符和新行)。

此外,再次只是國際海事組織,這是一個「逃避」作爲文字空間的好方法,而不是使用「\」,這很容易被未來的代碼維護人員誤解或忽略。

+0

如何啓用/禁用此設置? –

+0

這個「自由空間」設置可以在沒有標誌的情況下啓用嗎? –

+1

@EmanuilRusev更新了一些有關修飾符的良好鏈接的問題。我對PHP的理解是有限的,但我相信答案是否定的,你會在正則表達式字符串的末尾看到標誌(尾隨正則表達式分隔符)。不過,可能會有更多的「全球」設置可以實現它。你應該能夠測試它是否被啓用,例如通過測試「xx」對/ xx /如果它未被啓用應匹配,但不應該匹配,如果它啓用(因爲你需要明確地逃避空間爲一個文字,以便它不被視爲可用空間)。 – Sepster

4

它們會產生相同的結果,但方括號內的結果更具可讀性並且更加慎重。

我個人寧願使用\s,除非文字空間是唯一允許的。