回答
你(?:wo)?men
(wo)?men
和在語義上等價的,但在技術上是不同的,即,首先是使用非捕獲和其它捕獲組。因此,問題是爲什麼使用非捕獲組,當我們捕捉那些?
非caprturing團體的幫助的時候。
- 爲了避免反向引用(記住,這是有時很難使用反向引用高於9)
- 爲了避免與99編號的反向引用極限的問題(通過減小編號捕獲基團的數目)(源的數量過多:Regular-expressions.info:大多數正則表達式支持多達99個捕獲組和兩位數的反向引用)
注意這不屬於Java正則表達式引擎,也不適用於PHP或.NET正則表達式引擎。 - 致lessen the overhead由將捕獲存儲在堆棧中導致
- 我們可以在不破壞捕獲組順序的情況下向現有正則表達式添加更多分組。
而且,它只是makes our matches cleaner:
可以使用非捕獲組保留組織或分組的好處,但沒有捕獲的開銷。
將現有的正則表達式轉換爲將捕獲轉換爲非捕獲組似乎不是一個好主意,因爲它需要付出很多努力。
此評論更多是一個編輯,你不覺得嗎? –
請注意,99反向引用限制與Java正則表達式引擎無關。在Java中捕獲組的數量存儲在*瞬時INT capturingGroupCount *,因此,理論上,可以有大量的反向引用,但有數量可以通過內存限制爲上限。 –
我試圖找到我們正在討論的開銷多少以及這實際上具有什麼影響(Java和Javascript)。 在性能方面使用非捕獲組是否有任何實際益處? – runlevel0
- 1. 非捕獲組內的捕獲組
- 2. 捕獲中包含非捕獲組?
- 3. 非捕獲組不貪婪?
- 4. 命名組中的非捕獲組
- 5. preg_match捕捉週期\。在非捕獲組
- 6. 捕獲組多次
- 7. PHP不與捕獲組尊重非捕獲組前瞻裏
- 8. 如何寫的非捕獲組的egrep
- 9. 捕獲開始非捕獲組的結尾
- 10. 如何匹配的非捕獲組
- 11. R中的正則表達式組捕獲多個捕獲組
- 12. 這個索引是多餘的嗎?
- 13. Java LinkedList API不是多餘的嗎?
- 14. 這些類屬性是多餘的嗎?
- 15. HAVING從句是多餘的嗎?
- 16. 這個循環是多餘的嗎?
- 17. 這些別名是多餘的嗎?
- 18. 這是多維數組內存空間的冗餘分配嗎?
- 19. 這個非捕獲組的目的是什麼?
- 20. 捕獲重複組的多個子組
- 21. Groovy - 多重捕獲組
- 22. 正則表達式:不是任意的非捕獲組
- 23. 替換忽略非捕獲組
- 24. Java正則表達式非捕獲組
- 25. 原子團和非捕獲組
- 26. Posix正則表達式非捕獲組
- 27. 在MySQL中使用非捕獲組REGEXP
- 28. REGEX非捕獲組不工作
- 29. 非捕獲組正則表達式
- 30. 正則表達式與非捕獲組
我認爲這將取決於您所使用的正則表達式。 Java的標準正則表達式字符串可能需要它,而我相當確定Perls會認爲它是多餘的。 – thecoshman
非捕獲基團是重上的處理器(因爲它需要額外的處理),而捕獲基團是重上存儲器(因爲它具有存儲許多東西)。但是,它們在語義上是等價的,因爲它們可以以不同的方式匹配相同的事物。你可以把它們看作是具有不同引擎的汽車,但都可以作爲騎行的一種手段。 –