Удалить обратную косую черту между 2 символами из строки

Мне нужно заменить обратную косую черту только между 2 символами, кроме кавычек («)

Так что, если у меня есть эта строка:

When I look at you, I\understand why I live //replace
When I look at you, I "\understand why I live // No replace
When I look at you, I"\understand why I live // No replace
Sword art online\Мастера меча онлайн opening //replace Sword art online Мастера меча онлайн opening

Это для строки json, но если я использую полоски, все обратные слэзы будут удалены. Мне нужно только удалить, если строка не имеет «кавычки.

Большое спасибо.

0

Решение

Вы можете использовать это:

$text = preg_replace('~"[^"]*"\K|\\\\~', '', $text);

или этот:

$text = preg_replace('~"[^"]*"(*SKIP)(*F)|\\\\~', '', $text);

Два шаблона потребляют символы, заключенные в кавычки.
Первый шаблон использует \K удалить все совпадающие символы слева из результата совпадения. Вторая заставляет шаблон потерпеть неудачу (с (*F)) и не повторять символы между кавычками (с (*SKIP)).

Обратите внимание, что буквенная обратная косая черта должна быть написана \\\\ в строке шаблона. (обратный слеш экранируется один раз для строки и один раз для механизма регулярных выражений).

1

Другие решения

Попробуй это:

$strings = array(
'When I look at you, I\understand why I live',
'When I look at you, I "\understand why I live',
'When I look at you, I"\understand why I live',
'Sword art online\Мастера меча онлайн opening'
);

foreach ($strings as $string) {
$str = addslashes(stripslashes($string));
var_dump($str);
}
0