2013-02-16 13 views
13

Ich habe noch nie zuvor Perl verwendet und ich habe eine grundlegende Frage.split(), aber Trennzeichen beibehalten

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 

Ich möchte diese Zeichenfolge an der "." Aber ich möchte die Zeit behalten. Wie kann dies erreicht werden?

Antwort

21

können Sie verwenden Lookbehind, dies zu tun:

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

Die Regex stimmt mit einer leeren Zeichenfolge überein, die einem Punkt folgt.

Wenn Sie das Leerzeichen zwischen den Sätzen bei gleichzeitig entfernen möchten, können Sie es ändern zu:

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

Positive und negative Lookbehind erklärt here

+0

Es funktioniert genau so, wie es dir danken sollte. Würde es Ihnen etwas ausmachen, genau zu erklären, was passiert? – SystemFun

+0

Soweit die Syntax? – SystemFun

+0

Link zu regular-expressions.info hinzugefügt – Barmar

10

Wenn Sie nicht über die Perioden dagegen in ihre eigenen Elemente im Array geteilt werden, können Sie Klammern verwenden Split zu sagen, um sie zu halten:

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

Ich glaube, ich könnte mit dem arbeiten, aber ich würde es vorziehen, sie an den Satz anzuhängen, so dass jedes Array-Element im Wesentlichen ein Satz ist. – SystemFun

+0

Es klingt wie ein Lookbehind- oder Lookahead-Assertion-Problem, mit dem ich mich nicht wohl fühle. –

Verwandte Themen