2013-06-05 31 views
8

Tôi đang cố gắng tách một chuỗi thành một mảng với sự phân chia xảy ra tại các khoảng trắng. Mỗi khối văn bản được phân cách bởi nhiều không gian (biến).Biến phân chia trên không gian trắng

Đây là chuỗi:

NUM8   host01 1,099,849,993 1,099,849,992    1 

Tôi đã thử những điều sau đây không thành công.

my @array1 = split//, $VAR1; 

my @array1 = split/+/, $VAR1; 

my @array1 = split /\s/, $VAR1; 

my @array1 = split /\s+/, $VAR1; 

Tôi muốn kết thúc với:

$array1[0] = NUM8 
$array1[1] = host01 
$array1[2] = 1,099,849,993 
$array1[3] = 1,099,849,992 
$array1[4] = 1 

cách tốt nhất để chia này là gì?

Cảm ơn!

+1

Tùy chọn cuối cùng nên làm việc, vì vậy tôi đoán là bạn có một số tab trong đó có thể. – squiguy

+0

Bạn đã nhận được kết quả gì từ nỗ lực của mình? Phương pháp cuối cùng bạn sử dụng được cho là hoạt động. – doubleDown

+0

@squiguy: '\ s' khớp các tab. Vấn đề là Perl sẽ trả về một danh sách với một trường có độ dài bằng 0 nếu chuỗi bắt đầu bằng dấu tách. – Borodin

Trả lời

21

Nếu đối số đầu tiên là split là chuỗi '' (khoảng trắng), nó là đặc biệt. Nó phải phù hợp với khoảng trắng của bất kỳ kích thước:

my @array1 = split ' ', $VAR1; 

(BTW, nó gần như là tương đương với tùy chọn cuối cùng của bạn, nhưng nó cũng loại bỏ bất kỳ khoảng trắng hàng đầu.)

+1

+1 đẹp .. không biết điều này. –

+0

Điều này dường như đang hoạt động! Cảm ơn – hallert

9

Chỉ cần cố gắng sử dụng:

my @array1 = split(' ',$VAR1); 

Codepad Demo

Từ Perldoc:

Trường hợp đặc biệt khác, phân tách mô phỏng hành vi mặc định của công cụ dòng lệnh khi PATTERN bị bỏ qua hoặc chuỗi theo nghĩa đen gồm một ký tự khoảng trắng (chẳng hạn như '' hoặc '\ x20 ", nhưng không, ví dụ//). Trong trường hợp này, bất kỳ khoảng trắng hàng đầu trong EXPR là loại bỏ trước khi chia tách xảy ra

+0

Điều này cũng đang hoạt động – hallert

4

\s+ trận đấu 1 hoặc nhiều khoảng trắng, và chia trên chúng

my @array1 = split /\s+/, $VAR1; 
+0

cũng hoạt động. Có lẽ sản lượng của tôi thay đổi trong khi tôi đang thử nghiệm để nó ném tôi đi. Có vẻ như tất cả các câu trả lời ở đây đều hiệu quả. – hallert

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