回答
我們可以向下打破你的模式分爲三個部分:
的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. Lex這是什麼正則表達式
- 3. 這是什麼正則表達式?
- 4. 這是什麼正則表達式?
- 5. 這將是什麼正則表達式?
- 6. ,這是什麼陣正則表達式
- 7. 這是什麼javascript正則表達式?
- 8. 是什麼,這些正則表達式
- 9. 這將是什麼正則表達式
- 10. 這是什麼javascript正則表達式
- 11. 什麼是正則表達式這些
- 12. 描述用正則表達式語言
- 13. 正則表達式查詢,描述
- 14. 什麼是MySQL的SQL正則表達式這個表達式
- 15. 正則表達式的正則表達式是什麼?
- 16. 這個正則表達式做什麼?
- 17. 這個正則表達式做什麼?
- 18. 這是什麼Java正則表達式代碼在做什麼?
- 19. 這是什麼javascript正則表達式在做什麼?
- 20. 正則表達式中這種替代方法的描述是否錯誤?
- 21. 這個正則表達式的mod_security規則是幹什麼的?
- 22. 什麼是這裏的正則表達式在這裏做
- 23. 這是什麼意思這個'(?U)'在nginx正則表達式
- 24. 正則表達式這是什麼正規表達式S#的意思^ */##小號
- 25. 這個替換正確的正則表達式是什麼?
- 26. iOS中這個NSString的正確正則表達式是什麼?
- 27. 爲什麼不能用正則表達式來描述遞歸結構?
- 28. 這種模式的正則表達式是什麼?
- 29. 這個正則表達式模式是什麼意思?
- 30. 這個PHP正則表達式模式是什麼意思?
+1是我迄今見過的調節表達式的最清晰解釋。 – 2010-09-11 19:21:19