2012-03-31 2 views
0

Ich habe eine Zeichenfolge wie "Die Bierparty 2011/2012" in PHP.Trennen Sie den Satz und die Jahre (Zahlen) in PHP

Ich kann immer noch nicht herausfinden, wie man diese Jahre und den Satz in zwei verschiedene Arrays macht? Wie folgt aus:

$arr[0] = the beer party; 
$arr[1] = 2011/2012 or if its just 2011 then $arr[1] = 2011; 

ich versucht habe \d+ und \S+\s+ aber nicht wissen, wie es zu benutzen mit kombiniert.

Antwort

3
preg_match('/(.*?)\s?(\d{4}(?:\/\d{4})*)$/', $yourString, $matches); 

$matches[1] enthält der Satz $matches[2] das Datum enthält.

+0

Vielleicht könnte ein wenig vereinfacht werden, aber es funktioniert und robust . +1. –

1

Ich würde versuchen, die Regex "(. *?) ([\ D \ /] +)", oder ähnlich.

bricht sie auseinander its:

- erste Capture-Gruppe, jedes Zeichen in einem ungreedy Weg (*.?). [\ d \ /] - entweder eine Zahl oder das Literal "/" (Schrägstrich). Dies ist um Dinge wie 2011 */* 2012 zu erfassen. ([\ d \ /] +) - Die zweite Erfassungsgruppe erfasst die vorherige Anweisung.

Wenn die erste Erfassungsgruppe gierig war, konnte sie auch die Zahlenliterale erfassen. Da es nicht gierig ist, wird es aufhören, den längsten gierigen Capturer zu erlauben, der die zweite Fanggruppe ist.

Weitere Informationen über Gier in Regex finden Sie unter http://www.skdevelopment.com/php-regular-expressions.php.

Hoffe, das hilft!

+0

In Ihrer Regex ist ein Fehler aufgetreten. Sie müssen dem Schrägstrich entkommen, den Sie abgleichen möchten (oder andere Begrenzer verwenden). Auch Ihr Spiel bricht an Streichern wie "Die Bierparty/2 2011/2012" – liquorvicar

+0

Richtig! Ich bin ihm tatsächlich entkommen. Ich denke, es wurde irgendwie im Textil entfernt. In Bezug auf den zweiten Teil, schien es aus der Frage, dass diese Instanzen nicht auftreten .. –

+0

Vielen Dank, ich werde Regex mehr studieren müssen, sieht nur so kompliziert aussieht –

0

Wenn Ihre Ziel Strings sind immer in diesem Format (dh in einem oder mehreren 4-stelligen Jahren durch Schrägstriche getrennt endet), dann können Sie verwenden, um dies

preg_match('/(\d{4}(\/\d{4})*)$/', $string, $matches); 

Dadurch werden alle Saiten des Formats passen „YYYY "oder" YYYY/YYYY "in Ihrer Zeichenfolge, die Sie dann entfernen können, um die beiden Teile zu erhalten.