2016-09-29 6 views
0

Ich habe eine String-Variable und möchte Jahr und Zahl allein extrahieren.Extrahiere ein Muster mit preg_match

$val = '2015(15)'; 
preg_match ('/(.*?)\((.*?)\)/',$val,$match); 
print_r($match); 

Ausgang: Array ([0] => 2015(15) [1] => 2015 [2] => 15)

Erwartet: die oben ist ok. oder Array ([0] => 2015 [1] => 15)

$val = '2015'; 
preg_match ('/(.*?)\((.*?)\)/',$val,$match); 
print_r($match); 

Ausgang: Array ()

Erwartet: Array ([0] => 2015 [1] => )

$val = '(15)'; 
preg_match ('/(.*?)\((.*?)\)/',$val,$match); 
print_r($match); 

Ausgang: Array ([0] => (15) [1] => [2] => 15)

Erwartet: Array ([0] => [1] => 15)

+1

Kannst du nicht einfach mit ')' explodieren und die endgültige ')' aus dem zweiten Element entfernen? Es gibt andere Nicht-Regex-Möglichkeiten. –

+0

Ja. Ich kann split oder explode verwenden und den letzten Index des Ergebnisarrays mit ')' trimmen. Danke für die Lösung. – Naga

Antwort

3

Lösung

Vielleicht können Sie versuchen, so etwas wie,

/([0-9]{4})?(?:\(([0-9]*)\))?/ 
+1

Wenn man über die Jahreszahl spricht, dann '([12] [0-9] {3})' ist ein bisschen realistischer, bedenke sogar die Abkürzung zwei Zahlenform, wie man zurück zu 4 konvertiert, wenn nur Jahre nach 2000 dann zählen (2 [0-9] {3}) ' – cske

+0

Vielen Dank. Auf diese Weise kann ich mein erwartetes Ergebnis erzielen. – Naga

+0

@cske Das ist vollkommen akzeptabel, aber macht auch den Code nach 2999 obsolet. Realistisch gesehen gibt es keinen Grund, die Jahre 0000 bis 9999 nicht zu akzeptieren, und der Grund, warum ich die Jahre eng auf 4 Zahlen beschränke, liegt an dem, was das OP zur Verfügung gestellt hat. –