2013-02-01 168 views
1
  1. (\d+|)之間VS (\d+)?
  2. [\w\W] VS [\d\D] VS .

也是有差別的,這些規則的正則表達式有什麼區別?應該選擇哪一個?什麼是正則表達式這些

我正在使用Javascript。

+0

選擇什麼? –

+3

請參閱http://regex101.com/ – maerics

+1

或http://rubular.com/ ...並選擇最簡單,最容易理解的。 –

回答

5

[\w\W][\d\D]用於像JavaScript這樣的語言,其中沒有dotall選項。 它匹配所有字符,包括換行符,不像.它匹配所有,但換行符。

\w\W or \d\D -> matches everything including newline characters 
       . -> matches everything except newline characters unless 
        's' (dotall modifier) is specified 
(\d+|) or (\d+)? -> matches 1 or more digits OR any position (null) 
        It could simply be written as '(\d*)' 
+0

'multiline'和'dotall'完全不同。 '.'不會與只有'multiline'選項設置的換行符匹配。 –

+0

應該只是說dotall。我的錯誤 –

+0

我犯了一個錯誤,在第一行中錯過了一個「+」。 – user1990553

3

第二個是挺有意思的,我想談談它的東西:

  • [\w\W][\d\D]是等價的,它們相當於[\s\S]也。 \W\w的補碼字符集,同樣適用於\D-\d對和\S-\s對。因此,放在一起時,他們將毫無例外地匹配任何角色。

    它們通常用於沒有構造「匹配任何字符,毫無例外」的情況。 JavaScript就是這種情況的一個例子。在[^]中也有一個不太知名且非常混亂的構造,在其他類型中通常無效。

  • .一般匹配任何字符,新行\n。根據不同的語言,它可能會排除更多的字符。

    對於Java,它排除\n\r\u0085\u2028,並\u2029。所以.相當於[^\n\r\u0085\u2028\u2029]

    對於JavaScript,點.將排除\r\u2028,並\u2029除了\n。所以.相當於[^\n\r\u2028\u2029]

    一些語言將有一個模式,使其.匹配任何字符,無一例外。它在Java和Python中被稱爲DOTALL模式,在C#和Perl中被稱爲SingleLine模式。

.的行爲因語言而異。一般而言,他們都同意在「正常」模式下排除\n,但在選擇排除更多時可能略有不同。

2

你沒有說你正在使用哪種語言,所以我將假定Perl。

  1. (\d+|)相當於(\d*)。它匹配0或更多位數的序列並將結果捕獲到$1(\d)?匹配0或1位數字。如果它匹配一個數字,它會將其放入$1;否則$1將是undef(如果您想消除?,則可以將其重寫爲(?:(\d)|))。

  2. [\w\W][\d\D]是等同的,匹配任何字符。 .默認等效於[^\n](匹配任何字符,但換行符)。如果你真的想匹配任何字符,你應該使用.並指定/s標誌,這使得.匹配任何字符。