Chỉ cần xem xét việc này. biểu thức thông thường là mạnh mẽ bởi vì họ đang biểu cảm và rất linh hoạt (với các tính năng như nhìn về phía trước, tiêu thụ tham lam và back-theo dõi). Có gần như luôn sẽ là một chi phí vào đó, tuy nhiên nhỏ.
Nếu bạn muốn tốc độ thô (và bạn sẵn sàng từ bỏ tính biểu cảm), bạn có thể thấy rằng nhanh hơn bỏ qua cụm từ thông dụng và chỉ đánh giá chuỗi, chẳng hạn như với mã giả sau:
def hasThreeAlphaNums(str):
alphanums = 0
for pos = 0 to len(str) - 1:
if str[pos] in set "[a-zA-Z0-9]":
alphanums++
if alphanums == 3:
return true
return false
đó là một phân tích cú pháp (một rất đơn giản trong trường hợp này), một công cụ mà có thể còn hơn mạnh mẽ hơn biểu thức thông thường. Đối với một ví dụ cụ thể hơn, hãy xem xét mã C sau:
#include <ctype.h>
int hasThreeAlphaNums (char *str) {
int count = 0;
for (int ch = *str; ch != '\0'; str++)
if (isalnum (ch))
if (++count == 3)
return 1;
return 0;
}
Bây giờ, khi hay không đó là nhanh hơn cho trường hợp cụ thể này, điều đó phụ thuộc vào nhiều yếu tố, chẳng hạn như liệu ngôn ngữ được giải thích hoặc biên soạn, làm thế nào hiệu quả các regex là dưới bao gồm, và như vậy.
Đó là lý do tại sao thần chú của tối ưu hóa là "Measure, đừng đoán!" Bạn nên đánh giá các khả năng trong môi trường mục tiêu của bạn.
Bạn quan tâm đến hương vị regex nào? –
@stribizhev Tôi quan tâm đến ECMAScript regex – fizix00