I have been trying to get the text between two symbols to be replaced with preg_replace
, but alas still not quite getting it right as I get a null output that is empty string, this is what I have so far
$start = '["';
$end = '"]';
$msg = preg_replace('#('.$start.')(.*)('.$end.')#si', '$1 test $3', $row['body']);
So an example output I am looking for would be:
normal text [everythingheregone] after text
To
normal text [test] after text
You are defining $start and $end as arrays, but using it as normal variables. Try changing your code to this:
$start = '\[';
$end = '\]';
$msg = preg_replace('#('.$start.')(.*)('.$end.')#si', '$1 test $3', $row['body']);
$row['body']= "normal text [everythingheregone] after text ";
$start = '\[';
$end = '\]';
$msg = preg_replace('#'.$start.'.*?'.$end.'#s', '$1 [test] $3', $row['body']);
//output: normal text [test] after text done
How about
$str = "normal text [everythingheregone] after text";
$repl = "test";
$patt = "/\[([^\]]+)\]/";
$res = preg_replace($patt, "[". $repl ."]", $str);
Should yield normal text [test] after text
EDIT
Fiddle demo here
I have a regex approach. The regular expression is :\[.*?]
<?php
$string = 'normal text [everythingheregone] after text ';
$pattern = '\[.*?]';
$replacement = '[test]'
echo preg_replace($pattern, $replacement, $string);
//normal text [test] after text
?>
some functions that may help
function getBetweenStr($string, $start, $end)
{
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
and
function getAllBetweenStr($string, $start, $end)
{
preg_match_all( '/' . preg_quote( $start, '/') . '(.*?)' . preg_quote( $end, '/') . '/', $string, $matches);
return $matches[1];
}