2010-09-11 103 views
2

一個在應用我的工作有以下正則表達式模式被驗證HTML輸入字段「{5} +」:這是什麼正則表達式描述:

.{5,}+ 

是什麼這檢查?

其他領域正在檢查這種模式,我也想不明白:

.+ 

回答

18

我們可以向下打破你的模式分爲三個部分:

dot是一個通配符,它​​匹配任何字符(除換行符,默認情況下,除非/smodifier設置)。

{5,}在點上指定repetition。它說這個點必須至少匹配5次。如果在逗號後面有一個數字,那麼點數必須在5和這個次數之間匹配,但由於沒有數字,它可以匹配無限次。

在您的第一個模式中,+possessive quantifier(請參閱下面的+在不同情況下可能意味着不同的事情)。它告訴正則表達式引擎,一旦它滿足之前的條件(即.{5,}),它不應該試圖回溯。


你的第二種模式比較簡單。點仍然意味着與上面相同(作爲通配符)。然而,這裏的+具有不同的含義,並且是重複運算符,意味着該點必須匹配1次或更多次(如上所述,也可以表示爲.{1,})。

正如您所見,+根據上下文具有不同的含義。當它自己使用時,它是一個重複操作符。但是,當它遵循不同的重複操作符(*,?,+{...})時,它變成佔有量詞。

+0

+1是我迄今見過的調節表達式的最清晰解釋。 – 2010-09-11 19:21:19

3

任何字符,5次或更多次。

  • 「。」指除換行符之外的任何字符。
  • {m,n}定義了一個有界區間。 「m」是最小值。 「n」是最大值。如果n沒有定義,就像這裏那樣,它是無限的。
  • 「+」表示所有格。
+0

'+'不貪心。正則表達式默認爲貪婪。你可能會考慮'?',這使得一個模式**懶惰**。 '+'是佔有慾。 – 2010-09-11 18:29:05

+0

你是對的:)感謝您的更正! – Mike 2010-09-11 18:30:05

4

+意味着在另一個量詞({5,})之後表示possessive match,即一旦找到匹配,*不回溯**。

例如,模式.{5,}x將匹配abcdex

  1. .{5,}比賽abcdex
  2. x什麼都不匹配。
  3. 所以回溯.{5,}並讓它匹配abcde
  4. Now x與之前的x相匹配。

.{5,}+x比賽abcdex

  1. .{5,}+比賽abcdex
  2. x什麼都不匹配。
  3. 不能回溯.{5,}+。我們必須在這裏停下來。

*:即使模式不能回溯,匹配的字符串仍然可以作爲一個整體被刪除。例如,a?.{5,}x將匹配{a?a.{5,}+bcdexx →不匹配},然後刪除整個.{5,}+a與{a?.{5,}+abcdexx →敵不過}重新啓動。因此,我們也可以說+使量詞「原子」。


在另一方面,+單獨僅僅意味着{1,},即匹配一次或多次。