Chúng tôi thường được thông báo rằng Regexps chậm và nên tránh bất cứ khi nào có thể.Thao tác chuỗi vs Regexps
Tuy nhiên, có tính đến các chi phí làm một số chuỗi thao tác chính mình ( không nói về sai lầm thuật toán - đây là một vấn đề khác nhau), đặc biệt là trong PHP
hoặc Perl
(có thể Java
) các hạn là gì, trong trường hợp nào chúng ta có thể xem xét thao tác chuỗi là một lựa chọn tốt hơn? Regexps nào đặc biệt là CPU tham lam?
Ví dụ, đối với những điều sau đây, trong C++
, Java
, PHP
hoặc Perl
, những gì bạn muốn giới thiệu
Các regexps có lẽ sẽ nhanh hơn:
s/abc/def/g
hoặc một giải pháp dựa... while((i=index("abc",$x)>=0) ...$y .= substr()...
?s/(\d)+/N/g
hay một thuật toán quét
Nhưng những gì về
- một email xác nhận regexp?
s/((0|\w)+?[xy]*[^xy]){2,7}/u/g
sẽ không phải là một thủ công và thuật toán cụ thể được nhanh hơn (thời gian nữa để viết)?
chỉnh sửa
Mấu chốt của vấn đề là để xác định những loại regexp tốt hơn sẽ được viết lại đặc biệt cho một vấn đề nhất định thông qua thao tác chuỗi?
edit2
Một thực hiện chung là Perl regexp. Ví dụ trong Perl - đòi hỏi phải biết làm thế nào chúng được thực hiện - những gì loại của regexp là để tránh, bởi vì việc thực hiện sẽ làm cho quá trình dài và không hiệu quả? Nó có thể không phải là một regexp phức tạp ...
chỉnh sửa tháng 7 năm 2011 (dựa trên ý kiến)
Tôi không nói rằng tất cả regexps chậm. Một số mẫu regexps cụ thể được biết là chậm, do việc xử lý cụ thể của chúng và do việc thực hiện chúng. Ví dụ:
Trong các triển khai Perl/PHP gần đây, những gì được biết là khá chậm - và nên tránh?
Câu trả lời được mong đợi từ những người đã nghiên cứu riêng của họ (profiler ...) và những người có thể cung cấp một loại hướng dẫn chung về những gì được đề nghị/để tránh.
Tôi muốn nói điều này nên là Wiki Cộng đồng, vì nó chủ quan trong tự nhiên (có thể nhanh hơn, bạn sẽ khuyên bạn nên làm gì). – fredley