preg replace - PHP preg_match & preg_replace outputing wrong -
<?php $string = "[img image:left]1.jpg[/img]example text 1[img image:left]2.jpg[/img] example text 2"; preg_match("/\[img\s*[^>]+\s*\](.*?)\[\/\s*img\]/i", $string, $match); $result = preg_replace("/\[img\s*[^>]+\s*\](.*?)\[\/\s*img\]/i", $match['1'], $string); echo $result; ?>
when using code should output 1.jpg
, example text 1
, 2.jpg
, example text 2
.
but shows 2.jpg
, example text 2
.
i dont know i'm doing wrong.
there 2 fundamental issues:
- you don't need use
preg_match()
,preg_replace()
, can usepreg_replace()
, reference capture groups in substitution - it looks copy pasted code html regex, , have
[^>]+
inside of[img]
, says 1+ non->
characters..it should[^\]]+
, 1+ non-]
characters
final solution:
$string = "[img image:left]1.jpg[/img]example text 1[img image:left]2.jpg[/img] example text 2"; $string = preg_replace("/\[img\s*[^\]]+\s*\](.*?)\[\/\s*img\]/i", ' \1 ', $string);
Comments
Post a Comment