2012-08-24 33 views
12

Tôi đang duy trì một số mã mà đọc giá trị trên một đài phát thanh nối tiếp và giải nén chúng vào cấu trúc dữ liệu Perl:Số lượng regex được đánh số tối đa là bao nhiêu?

# Don't yell at me, I didn't write this 
if ($command_string =~ 
    /^.(.)(.).(..)(.)(..)(.)(....)(....)(....)(....) 
     (..)(..)(.)(.)(.)(.)(..)(..)(..)(..)(..)(..)(.)(.)....... 
      (.)........(.)(.).*/sx) { 

    $config->{sequence}  = hex(unpack('H2', $1)); 
    $config->{radio_id}  = hex(unpack('H2', $2)); 
    ... 
    $config->{radio_type} = hex(unpack('H2', $26)); 
    $config->{radio_channel} = hex(unpack('H2', $27)); 
} 

này trở nên cồng kềnh chụp regex khiến tôi ngạc nhiên: những gì là giới hạn trên các biến chụp đánh số trong Perl? Liệu nó đi tất cả các con đường lên đến $MAXINT?

+1

Perl, ở bất cứ nơi nào thực tế, không áp đặt giới hạn nhân tạo (làm mục tiêu thiết kế). – DavidO

+4

Regex được thực hiện tốt nhất bằng cách sử dụng một 'giải nén 'khác – Borodin

Trả lời

16

Tập lệnh này hoạt động tối thiểu $N=5000000. Sau đó, nó hết bộ nhớ.

$N = $ARGV[0] || 5000; 
$q = '(.)' x $N; 
$regex = qr/$q/; 
("x" x $N) =~ $regex; 
print eval "\$$N"; 
+5

+1, nói cách khác, giới hạn là đủ lớn nếu bạn chưa bao giờ gần đến nó, bạn cần phải suy nghĩ lại cách tiếp cận của bạn cho vấn đề. –

Các vấn đề liên quan