Archief - PHP: preg_replace

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

JohnBeton

Legacy Member
Hi,

ken zelf maar wat basic regular expressions (/replacing), en zit dan ook vast met het volgende probleem..

Stel dat als input het volgende wordt gegeven:
blabla1 [aa bb cc dd ee] blabla2

Dan zou ik dit moeten kunnen omzetten naar dit:
blabla1 [aa] [bb] [cc] [dd] [ee] blabla2

Het lijkt me 2 preg_replaces in elkaar ofzo? (eerst de tekst uit [] halen en dan splitten op spaties?). Iemand die me hierbij kan helpen?

Smokyke

Legacy Member
$string = 'blabla1 [aa bb cc dd ee] blabla2';
$string_exp = explode('[',$string);
$string_exp2 = explode(']',$string_exp[1]);
$string_alleen_haakjes = '['.$string_exp2[0].']';
$string_alleen_haakjes = str_replace(" ","][", $string_alleen_haakjes);

heb dit effe snel in elkaar gestoken, ben niet zeker of dit de juiste syntaxis is dus nog even nakijken voordat je gebruikt.

Fr3aK

Legacy Member
PHP:
function replaceAll($match) {
	$i = 1;
	$output = '';
	$results = explode(' ', substr($match[0], 1, strlen($match[0])-2));
	foreach ($results as $result) {
		$output .= '['.$result.']';
		if ($i < count($results)) {
			$output .= ' ';
		}
		$i++;
	}
	return $output;
}

$string = "blablabla [aa bb cc dd ee] blablalala";

$output = preg_replace_callback('@\[(([a-zA-Z]+)\s?)+\]@', 'replaceAll', $string);

echo $string.'<br />'.$output;

Ik neem aan dat het waarschijnlijk iets sneller en properder werkt dan Smokyke zijn oplossing :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan