有沒有一種方法可以在Perl中預編譯正則表達式?我有一個我在程序中多次使用並且在使用之間不會改變的地方。有沒有一種在Perl中預編譯正則表達式的方法?
24
A
回答
57
對於文字(靜態)正則表達式,沒有什麼可做 - perl只會編譯它們一次。
if ($var =~ /foo|bar/) {
# ...
}
對於存儲在變量中的正則表達式,您有幾個選項。您可以使用qr//
運營商建設一個正則表達式對象:
my $re = qr/foo|bar/;
if ($var =~ $re) {
# ...
}
,如果你想使用正則表達式在多個地方或把它傳遞給子程序這是非常方便。
如果正則表達式是一個字符串,你可以使用/o
選項承諾的perl,它永遠不會改變:
my $pattern = 'foo|bar';
if ($var =~ /$pattern/o) {
# ...
}
它通常是更好地這樣做,雖然。 Perl很聰明,知道變量沒有改變,正則表達式也不需要重新編譯。指定/o
可能是過早的微觀優化。這也是一個潛在的陷阱。如果變量已將更改爲使用/o
,則會導致perl使用舊的正則表達式。這可能會導致難以診斷錯誤。
19
簡單:檢查qr //運算符(記錄在perlop下的Regexp Quote-Like Operators)。
my $regex = qr/foo\d/;
$string =~ $regex;
相關問題
- 1. Javascript - 預編譯的正則表達式
- 2. Perl的正則表達式沒有給出預期的結果
- 3. Perl的正則表達式預編譯 - UTF8
- 4. perl預編譯的正則表達式問題
- 5. 有沒有一種方法,以配合與C#正則表達式的味道
- 6. 有沒有更好的方法通過perl匹配這個正則表達式?
- 7. 有沒有一種方法可以評估Perl正則表達式匹配的次數?
- 8. 在Perl中使用預編譯正則表達式時的問題
- 9. 有沒有辦法在Perl中重載正則表達式綁定運算符`=〜`?
- 10. 在Perl正則表達式中沒有得到多個替換
- 11. 在PHP中編譯正則表達式
- 12. 有沒有一種方法可以在Apache中禁用(或啓用)正則表達式規則?
- 13. RewriteRule無法編譯正則表達式
- 14. '[]'在Perl中是一個有效的正則表達式嗎?
- 15. 沒有正則表達式庫的簡單正則表達式?
- 16. 正則表達式用Perl,如預期
- 17. 正則表達式在JavaScript中沒有按預期工作
- 18. Perl正則表達式在@
- 19. Perl正則表達式在\
- 20. 正則表達式在Perl
- 21. 正則表達式沒有在Java
- 22. 沒有正則表達式中PHP
- 23. 有沒有一種方法可以在Hibernate搜索中通過短語搜索並使用正則表達式?
- 24. 的java lambda表達式沒有編譯
- 25. Perl的正則表達式
- 26. 在Perl中匹配正則表達式和另一個正則表達式
- 27. perl:如何從預編譯版本獲取原始正則表達式?
- 28. Perl的正則表達式語法
- 29. Python的正則表達式沒有給預期的結果
- 30. 有問題傳遞一個正則表達式,通過一種方法:
不錯,它似乎可以用作s ///結構中的模式。它仍然是預編譯的,還是在這種情況下再次編譯? – akostadinov 2012-11-16 15:18:19
@akostadinov它仍然是預編譯的。 – 2018-03-01 19:02:58