Мне нужно заменить обратную косую черту только между 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, но если я использую полоски, все обратные слэзы будут удалены. Мне нужно только удалить, если строка не имеет «кавычки.
Большое спасибо.
Вы можете использовать это:
$text = preg_replace('~"[^"]*"\K|\\\\~', '', $text);
или этот:
$text = preg_replace('~"[^"]*"(*SKIP)(*F)|\\\\~', '', $text);
Два шаблона потребляют символы, заключенные в кавычки.
Первый шаблон использует \K
удалить все совпадающие символы слева из результата совпадения. Вторая заставляет шаблон потерпеть неудачу (с (*F)
) и не повторять символы между кавычками (с (*SKIP)
).
Обратите внимание, что буквенная обратная косая черта должна быть написана \\\\
в строке шаблона. (обратный слеш экранируется один раз для строки и один раз для механизма регулярных выражений).
Попробуй это:
$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);
}