2009-03-18 34 views

Trả lời

13

Có, split là những gì bạn muốn.

@tokens = split(/:/, "a:b:c:d"); 
foreach my $token (@tokens) { 
    .... 
} 
+1

foreach $ token (@tokens) {} của tôi! của tôi! của tôi :) – nxadm

9

Bạn có thể sử dụng tính năng chia tách. Bạn cũng có thể sử dụng nó với một regex.


my @tokens = split(/:/,$string); 

Đối với phân tích tiên tiến hơn, tôi khuyên bạn nên Parse::RecDescent

+0

Lưu ý rằng chia() cũng lấy một chuỗi như tham số đầu tiên, đó là hiệu quả hơn trong các trường hợp như thế này, nơi nó chỉ là một chuỗi đơn giản. split (':', $ string) – mpeters

+0

@mpeters: Không, nó vẫn là một regex. thử chia ".", "ab.cd"; "." khớp với bất kỳ ký tự nào. Và việc sử dụng chuỗi "" bao gồm một dấu cách đơn là trường hợp đặc biệt, không có nghĩa là "khớp một không gian đơn lẻ" – runrig

+0

@mpeters: Phân chia nào cho phép bạn làm là sử dụng dấu ngoặc kép (đơn hoặc kép) cho dấu phân tách regex mà không có trước đó " m "như toán tử regex thông thường. – runrig

3

nếu bạn có:

$a = "a:b:c:d"; 
@b = split /:/, $a; 

sau đó bạn nhận được:

@b = ("a", "b", "c", "d") 

Nói chung, đây là công trình như thế nào phân chia:

split /PATTERN/,EXPR 

Nơi PATTERN có thể khá nhiều regex. Bạn không bị giới hạn đối với các mã thông báo đơn giản như ':'

4

Ngoài ra hãy xem tài liệu đi kèm với perl bằng cách gõ vào một dòng lệnh nhắc nhở:

perldoc -f split 

Để tìm kiếm câu hỏi thường gặp sử dụng

perldoc -q split 
Các vấn đề liên quan