У меня есть следующая проблема: я хочу заменить (в php) особым символом, но только если он находится между двумя другими символами. Он пытался найти решение с помощью preg_replace, но он не работает.
Я хочу заменить все; с a: который находится между «примерами:
$orig_string= 'asbas;"asd;";asd;asdadasd;"asd;adsas"'
результатом должно быть:
'asbas;"asd:";asd;asdadasd;"asd:adsas"'
Я пробовал несколько регулярных выражений, но без каких-либо успехов …
Два примера, которые я пробовал:
$result = preg_replace('(?<=\")(.*)(;)(.*)(?=\")',':', $str); $result = preg_replace('.*\".*(;).*\"',':', $str);
Кто-нибудь может мне помочь?
большое спасибо
В
Здесь вам не нужно использовать внешний вид. Его можно записать как
("[^";]*);([^"]*")
замените на \1:\2
Демо-версия Regex
Контрольная работа
preg_replace ("/(\"[^\";]*);([^\"]*\")/m", "\\1:\\2", 'asbas;"asd;";asd;asdadasd;"asd;adsas"' ); => asbas;"asd:";asd;asdadasd;"asd:adsas"
Обновить:
;(?!(?:"[^"]*"|[^"])*$)
Просто замените соответствующий ;
с :
DEMO
Простым понятным решением может быть использование preg_replace_callback :
$str = preg_replace_callback('/"[^"]+"/', function ($m) { return str_replace(";", ":", $m[0]); }, $str);
"[^"]+"
захватывает цитируемый материал до $m[0]
где: заменяется на :
См. Тест на eval.in (ссылка скоро истечет)
Как насчет замены строки?
str_ireplace(';";', ':";', $orig_string);
asbas; "ASD:"; ASD; asdadasd; "ASD; adsas"