LIeber Felix
Mit PREG_OFFSET_CAPTURE bekommst du ein Array dieser Art:
Array(
[0] => Array(
[0] => scherz-a
[1] => 0
)
[1] => Array(
[0] => a
[1] => 7
)
)
Die erste Dimension sind die Subpattern, in der zweiten liegt auf Schlüssel 0 das Match und auf Schlüssel 1 die Position im Input-String (also z.B. 7 für das a). Diese Angaben kannst du in substr_replace() verwenden, um genau diesen gefundenen Teil durch etwas beliebiges anderes zu ersetzen.
in deinem Beispiel würde das dann so aussehen:
preg_match_all("/scherz-([abc])/",$usereingabe,$matches,PREG_OFFSET_CAPTURE);
list($orig,$sub1) = offsetArray($matches); // offsetArray() ist von mir, siehe untern.
foreach ($orig as $key => $elem) {
$usereingabe = substr_replace($usereingabe,$array[$sub1[$key][0]],$orig[$key][1],strlen($orig[$key][0]));
}
Das ist jetzt ungetestet.
Für mich hat es den vorteil, daß ich sehr flexiebel bin, und die Funktion ist wesentlich übersichtlicher.
// offsetArray() macht ein array_reverse() für jedes Subpattern.
function offsetArray($matches) {
$ret = array();
while (count($matches) > 0) {
$ret[] = array_reverse(array_shift($matches));
}
return $ret;
}
Grüße
Heizer