I have the following problem: I want to replace (in php) a special character, but only if it\'s between two other characters. It tried to find a solution with with preg_repl
What about string replace?
str_ireplace(';";', ':";', $orig_string);
asbas;"asd:";asd;asdadasd;"asd;adsas"
You need not use look arounds here. It can be written as
("[^";]*);([^"]*")
replace with \1:\2
Regex Demo
Test
preg_replace ("/(\"[^\";]*);([^\"]*\")/m", "\\1:\\2", 'asbas;"asd;";asd;asdadasd;"asd;adsas"' );
=> asbas;"asd:";asd;asdadasd;"asd:adsas"
Update:
;(?!(?:"[^"]*"|[^"])*$)
Just replace the matched ;
with :
DEMO
A simple understandable solution could be the use of preg_replace_callback:
$str = preg_replace_callback('/"[^"]+"/',
function ($m) { return str_replace(";", ":", $m[0]); },
$str);
"[^"]+"
captures the quoted stuff to $m[0]
where ;
is replaced by :
See test at eval.in (link will expire soon)
;(?=[^"]*"(?:[^"]*"[^"]*")*[^"]*$)
Try this.Replace by :
.See demo.
https://www.regex101.com/r/bC8aZ4/16