回答
我們可以向下打破你的模式分爲三個部分:
的dot是一個通配符,它匹配任何字符(除換行符,默認情況下,除非/s
modifier設置)。
{5,}
在點上指定repetition。它說這個點必須至少匹配5次。如果在逗號後面有一個數字,那麼點數必須在5和這個次數之間匹配,但由於沒有數字,它可以匹配無限次。
在您的第一個模式中,+
是possessive quantifier(請參閱下面的+
在不同情況下可能意味着不同的事情)。它告訴正則表達式引擎,一旦它滿足之前的條件(即.{5,}
),它不應該試圖回溯。
你的第二種模式比較簡單。點仍然意味着與上面相同(作爲通配符)。然而,這裏的+
具有不同的含義,並且是重複運算符,意味着該點必須匹配1次或更多次(如上所述,也可以表示爲.{1,}
)。
正如您所見,+
根據上下文具有不同的含義。當它自己使用時,它是一個重複操作符。但是,當它遵循不同的重複操作符(*
,?
,+
或{...}
)時,它變成佔有量詞。
任何字符,5次或更多次。
- 「。」指除換行符之外的任何字符。
- {m,n}定義了一個有界區間。 「m」是最小值。 「n」是最大值。如果n沒有定義,就像這裏那樣,它是無限的。
- 「+」表示所有格。
'+'不貪心。正則表達式默認爲貪婪。你可能會考慮'?',這使得一個模式**懶惰**。 '+'是佔有慾。 – 2010-09-11 18:29:05
你是對的:)感謝您的更正! – Mike 2010-09-11 18:30:05
.{5,}+
意味着
.+
是同樣的事情,但它1和無限的時間之間的匹配,根據需要(貪婪回饋)。
正如我之前提到的很多次,我是RegexBuddy的巨大粉絲。它的「創建」模式非常適合解構正則表達式。
+
意味着在另一個量詞({5,}
)之後表示possessive match,即一旦找到匹配,*不回溯**。
例如,模式.{5,}x
將匹配abcdex
:
.{5,}
比賽abcdex
。x
什麼都不匹配。- 所以回溯
.{5,}
並讓它匹配abcde
。 - Now
x
與之前的x
相匹配。
但.{5,}+x
將不比賽abcdex
:
.{5,}+
比賽abcdex
。x
什麼都不匹配。- 不能回溯
.{5,}+
。我們必須在這裏停下來。
*:即使模式不能回溯,匹配的字符串仍然可以作爲一個整體被刪除。例如,a?.{5,}x
將匹配{a?
→ a
,.{5,}+
→ bcdex
,x
→不匹配},然後刪除整個.{5,}+
和a
與{a?
→ ,
.{5,}+
→ abcdex
,x
→敵不過}重新啓動。因此,我們也可以說+
使量詞「原子」。
在另一方面,+
單獨僅僅意味着{1,}
,即匹配一次或多次。
- 1. 這是什麼正則表達式?
- 2. 這是什麼正則表達式?
- 3. 這是什麼javascript正則表達式?
- 4. 是什麼,這些正則表達式
- 5. ,這是什麼陣正則表達式
- 6. 正則表達式查詢,描述
- 7. 描述用正則表達式語言
- 8. 這個正則表達式做什麼?
- 9. 這個正則表達式做什麼?
- 10. 正則表達式中這種替代方法的描述是否錯誤?
- 11. 這個正則表達式的mod_security規則是幹什麼的?
- 12. 這是什麼意思這個'(?U)'在nginx正則表達式
- 13. 這個替換正確的正則表達式是什麼?
- 14. 這個PHP正則表達式模式是什麼意思?
- 15. 這個正則表達式模式是什麼意思?
- 16. 正則表達式:什麼是InCombiningDiacriticalMarks?
- 17. 什麼是正則表達式接受
- 18. 什麼是正則表達式?
- 19. 正則表達式/^\ s * $/do是什麼?
- 20. 什麼是好的正則表達式?
- 21. 什麼是「Test123」的正則表達式
- 22. * abc的正則表達式是什麼?
- 23. 是什麼?你在正則表達式
- 24. 這是在java中的正則表達式是什麼?
- 25. 正則表達式模式的正則表達式模式是什麼?
- 26. 用於描述表單輸入的正則表達式
- 27. JavaScript中這些正則表達式的含義是什麼?
- 28. 這個正則表達式的含義是什麼?
- 29. /.../這個Ruby正則表達式是什麼意思?
- 30. 在正則表達式中,這是什麼--->「?!」
+1是我迄今見過的調節表達式的最清晰解釋。 – 2010-09-11 19:21:19