Hallo Jörg,
ich schließe mich dedlfix da an - "nicht" sollte nicht herauskommen.
preg_replace liefert "nichts" (also null) nur dann, wenn ein Fehler auftritt. Zum Beispiel, wenn die Regex nicht gültig ist. In der PHP Sandbox bekomme ich dann aber auch eine Warning.
Es ist bester Brauch, in der Development-Phase Warnungen und Errors auf dem Bildschirm ausgeben zu lassen. Am besten auch die Notices. Wenn nicht Bildschirm, dann zumindest Logdatei (kann man in der php.ini konfigurieren).
Bist Du also sicher, dass die Regex, die Du im PHP stehen hast, und die Regex in regex101 identisch sind? Oder ist da ein neckisches Klämmerchen, das sich versteckt hat?
Ich hätte dann noch zwei Anmerkungen:
(1) Du hast einen Typo drin: Das Attribut, nach dem Du suchst, heißt src, nicht scr. Das führt aber zu einen Nicht-Match und damit zur unveränderten Rückgabe des Eingabestrings. Einen Leerstring bzw. Null als Rückgabe erklärt es nicht.
(2) Klammern sind schön und gut, aber zu viele sind's auch nicht. Jede Klammer erzeugt eine Group, und die können auch verwirren. Das folgende Pattern matcht ebenfalls das, was Du suchst.
<img\s.*?src="(.*?\/test234\/.*?)".*?>
Allerdings ist der Substitution Marker nun $1, weil Gruppen weggefallen sind.
Es wäre prima, wenn PHP das könnte, was regex101 behauptet: Ersetzungen mit benannten Gruppen, aber das funktioniert nicht. Und ich will mich nicht so tief in PHP reinmengen, dass ich dort einen RFC eintüten wollte. Named Replacements sind mit einer Callback-Funktion möglich.
Rolf
sumpsi - posui - obstruxi