我應該如何處理標有「警告」(如「(?{code})」,「(?? {code})」或「Special Backtracking Control Verbs」)的正則表達式?我應該如何認真對待這些警告?我應該如何處理標有「警告」的正則表達式?
1
A
回答
4
我有點覺得他們在這裏留下來,一種方式或其他 - 特別是代碼轉義。代碼轉義已經和我們在一起十多年了。
他們的scar - - 他們可以以不可預見的方式調用代碼 - 由use re "eval"
負責。此外,直到5.12 IIRC,正則表達式匹配器還沒有被重新使用,這可能會限制它們的用處。
string-eval版本(??{ code })
曾經是遞歸的唯一方法,但自從5.10版本以來,我們有更好的方法來做到這一點;對速度差異進行基準測試表明,在大多數情況下,評估方式是較慢的。
我主要使用block-eval版本(?{ code})
來添加調試,這種調試發生在與use re "debug"
不同的粒度。它曾經隱約打擾我,從塊評估版本的返回值是不可用的,直到我意識到它是。你只是不得不使用它作爲一個條件模式的測試部分,這樣的模式來測試一個數字是否是由這是一個每個位置下降到正確的數字了:
qr{
^(
(\p{Decimal_Number})
(?(?= (\d)) | $)
(?(?{ ord $3 == 1 + ord $2 }) (?1) | $)
) $
}x
之前,我想通了條件,我會這樣寫:
qr{
^(
(\p{Decimal_Number})
(?= $ | (??{ chr(1+ord($2)) }))
(?: (?1) | $)
) $
}x
這是效率低得多。
回溯控制動詞更新。我主要用它們來獲得所有可能的比賽排列,並且只需要(*FAIL)
。我相信這是(*ACCEPT)
功能,特別標記爲「高度實驗性」。這些只是自5.10以來一直與我們在一起。
相關問題
- 1. 我應該如何處理這種正則表達式?
- 2. 我該如何處理這個正則表達式問題?
- 3. 我該如何處理這個警告
- 4. 正則表達式如何處理?
- 5. 正則表達式處理
- 6. 正則表達式逃逸警告
- 7. 警告與正則表達式
- 8. 正則表達式VB.net我應該組?
- 9. 如何處理具有多種模式的正則表達式?
- 10. Perl的正則表達式用`#使用警告標量;`啓用
- 11. 意外的正則表達式警告「警告:人物類有重複範圍」
- 12. 我應該如何閱讀這個bash的正則表達式?
- 13. 在正則表達式中處理表達式?只有
- 14. 如何處理在Python中具有unicode的正則表達式?
- 15. GAE如何處理正則表達式URL處理程序?
- 16. 如何使用正則表達式,而不養RuboCop警告
- 17. 如何解決警告:preg_replace():空正則表達式?
- 18. 如何在Scala中應用正則表達式處理輸出?
- 19. Java的正則表達式處理
- 20. 我應該如何分隔一串正則表達式?
- 21. 爲什麼紅寶石警告我這個正則表達式?
- 22. 正則表達式處理HTML
- 23. 正則表達式來處理cookies
- 24. 處理Ping數據(正則表達式)
- 25. 正則表達式:處理參數
- 26. 正則表達式或批處理
- 27. 正則表達式 - 不處理DLE
- 28. 紅寶石正則表達式處理
- 29. 處理多個正則表達式組
- 30. 在ruby中處理正則表達式
(?{ord $ 3 == 1 + ord $ 2}):這是否停止正則表達式,如果它不是真的? – 2010-11-24 14:56:54