bubble: Regex-Frage

Beitrag lesen

Wie gehe ich am sinnvollsten vor, wenn ich aus meinem String jeden dieser Ausdrücke ala [10xxx-yyy10] in "Am 1.Februar hat Peter 10 jähriges Jubiläum alt umsetzen will"? Das "xxx" in allen Fällen ein gegebenes (mysql)Datum und das "yyy" steht jeweils für einen gegebenen Namen.

Die Angaben wären somit:

$datum = "2013-01-21";
$Name = "Bernd";
$string="[10xxx-yyy10]\n[20xxx-yyy5]\n[30xxx-yyy]";

Mir fällt grad auf das \w falsch ist >.< \w ist a-zA-Z0-9
stattdessen verwende ich a-z in Verbindung mit dem Modifier i (caseInsensitive)

Da würde ich ein ganz anderes Muster nehmen.

wie man sieht besteht das Datum aus 4 Ziffern + "-" + 2 Ziffern +"-" + 2 Ziffern, ergibt das Teilmuster (\d{4})-(\d{2})-(\d{2})
davon ausgehend das der Name nur aus Buchstaben besteht ist sein Teilmuster ([a-z]+)
die vorderen Ziffern versteh ich nich also ignorier ich sie mit \d*
die hinteren ziffern sind das jubiläum (\d*)

das muster ergibt als /[\d.*(\d{4})-(\d{2})-(\d{2})-([a-z]+)(\d*)]/i

Im folgendem ohne Erklärung (sollte so reichen):

  
	$output = "";  
	$str = "[102015-11-07-paul25]\n[102015-11-07-herbert]";  
	$template = "Am %s.%s.%s hat %s %sjähriges Jubiläum\n";  
	if(preg_match_all("/\[\d.*(\d{4})-(\d{2})-(\d{2})-([a-z]+)(\d*)\]/i",$str,$data))  
		foreach($data[0] as $idx => &$unused)  
			$output .= sprintf($template, $data[3][$idx],$data[2][$idx],$data[1][$idx],$data[4][$idx],($data[5][$idx]?$data[5][$idx]:"ein"));

MfG
bubble