2013-02-16 38 views
13

Tôi chưa từng sử dụng Perl trước đây và tôi có một câu hỏi cơ bản.split() nhưng giữ dấu phân tách

my $string1 = "Hi. My name is Vlad. It is snowy outside."; 

my @array = split('.' $string1); ##essentially I want this, but I want the period to be kept 

Tôi muốn chia chuỗi này thành '.' Nhưng tôi muốn giữ thời gian. Làm thế nào điều này có thể được thực hiện?

Trả lời

21

Bạn có thể sử dụng lookbehind để làm điều này:

split(/(?<=\.)/, $string) 

Regex khớp với một chuỗi trống sau một khoảng thời gian.

Nếu bạn muốn xóa khoảng trắng giữa câu cùng một lúc, bạn có thể thay đổi nó thành:

split(/(?<=\.)\s*/, $string) 

tích cực và tiêu cực lookbehind được giải thích here

+0

Nó hoạt động chính xác như thế nào nên cảm ơn bạn. Bạn có thể giải thích chính xác những gì đang xảy ra không? – SystemFun

+0

Theo như cú pháp? – SystemFun

+0

Đã thêm liên kết đến regular-expressions.info – Barmar

10

Nếu bạn không nhớ các giai đoạn được chia thành các yếu tố riêng của họ trong mảng, bạn có thể sử dụng dấu ngoặc đơn để nói chia tay để giữ cho chúng:

my @array = split(/(\.)/, $string); 
+0

Tôi cho rằng tôi có thể làm việc với điều đó, nhưng tôi muốn có chúng gắn liền với câu sao cho mỗi phần tử mảng cơ bản là một câu. – SystemFun

+0

Nghe có vẻ giống như một vấn đề xác nhận lookbehind hoặc lookahead, mà tôi không cảm thấy thoải mái. –

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