約迴歸正則表達式
回答
[a-z]\w+\S\B
模式不是一個好模式。爲什麼?因爲相鄰的子模式可以相互匹配。這就是爲什麼在這種基本子模式的短輸入中有3個回溯步驟。
現在,一旦你明白子模式的作用,一切都會變得清晰。
步驟1:我們發現字符串中的空白位置(正則表達式引擎檢查輸入字符串中的每個位置)。
步驟2:[a-z]
第一個字符W
匹配(因爲該模式是不區分大小寫的
步驟3:自該\w+
匹配elcome
是文本的單詞字符塊被添加所有這些字符。到匹配值(Welcome
已經在這一點!但還是有子模式,試圖匹配。因此,正則表達式引擎繼續努力工作。)
步驟4:正則表達式引擎試圖容納\S
(非空白)子模式的一些文本。它回溯,即產生最後一個字符來測試它是否可以與\S
子模式相匹配。
第5步:最後的e
符合要求。現在我們在比賽中仍然有Welcome
,但最後的e
「屬於」子模式\S
。
步驟6:e
與\S
匹配後面沒有與非字邊界(如\B
不會在字符串的末尾匹配,如果最後一個字符是一個字符)。這個事實使e
與\S
子模式的匹配無效。因此,正則表達式引擎必須再次回溯以重新適應\S
子模式的值。 e
不能與\S
匹配,因此回溯到m
。這就是爲什麼步驟6中的正則表達式正好在o
之後。
步驟7:\S
可以匹配m
,所以現在m
「屬於」 \S
子模式。
步驟8:\B
m
和e
之間的位置匹配。繼續。
第9步:達到模式結束。匹配值返回:Welcom
。
的+
是貪婪的,它嘗試匹配一切。所以一旦\w+
匹配整個輸入,引擎會嘗試匹配\S
並失敗,所以它會回退並嘗試與之前的\w+
相匹配。它繼續這樣做直到找到(或不是)匹配。
我很好奇爲什麼在6級中回退兩步。謝謝。 –
- 1. 正則表達式選項 - 沒有遞歸正則表達式
- 2. 正則表達式正則表達式返回的值正則表達式
- 3. 正則表達式 - 遞歸模式
- 4. bash,正則表達式,返回匹配的正則表達式
- 5. 回車正則表達式
- 6. 回溯正則表達式
- 7. 正則表達式返回
- 8. 正則表達式(正則表達式)
- 9. 正則表達式(正則表達式)
- 10. 正則表達式(正則表達式)
- 11. 正則表達式約束驗證 - grails
- 12. SQL Server的正則表達式約束
- 13. 正則表達式的路由約束
- 14. sql正則表達式檢查約束
- 15. 正則表達式驗證 - grails約束
- 16. 在C#中遞歸正則表達式#
- 17. JavaScript中的遞歸正則表達式
- 18. Ruby中的遞歸正則表達式
- 19. 如何Perl遞歸正則表達式
- 20. PHP的bbcode遞歸正則表達式
- 21. php遞歸正則表達式
- 22. ruby遞歸正則表達式
- 23. 遞歸匹配的正則表達式
- 24. 如何使用正則表達式評估約束? (PHP,正則表達式)
- 25. Python正則表達式模塊中的遞歸正則表達式?
- 26. 正則表達式正則表達式正則表達式使用正則表達式,但不是與Python
- 27. 正則表達式正則表達式模仿正則表達式
- 28. PHP-MySQLi替換爲正則表達式/正則表達式/正則表達式
- 29. 正則表達式和回車返回
- 30. 正則表達式:正回顧後
整個測試字符串是'歡迎來到我的世界!'。我想匹配'世界!'只要。我現在知道了。非常感謝你!祝你有美好的一天〜:) –