Используя preg_replace (PHP), я хочу удалить все горизонтальные пробелы, кроме пробелов, найденных между кавычками ("" и '') (включая экранированные кавычки)
Пример (регулярное выражение должно повернуть левую сторону в правую сторону):
2 + 2 => 2+2
f( " ") => f(" ")
f("Test \"mystring\" .") => f("Test \"mystring\" .")
f("' ", " ") => f("' "," ")
Используя другой пост Я придумал:
\h(?=[^']*(?:'[^']*'[^']*)*$)(?=[^"]*(?:"[^"]*"[^"]*)*$)
Который в основном смотрит в будущее и проверяет, есть ли четное количество кавычек до конца строки (как "", так и '').
Однако у меня проблемы с экранированными символами и кавычками внутри кавычек.
" ' test " => The ' causes problem
" \" test " => The \" causes problem
Я думал об использовании негативных взглядов: (?<!\\)"
, но не могу заставить его работать. Следующее регулярное выражение терпит неудачу. Не соответствует, когда строка содержит экранированные кавычки.
\h(?=[^"]*(?:(?<!\\)"(?:[^"]*?(?<!\\)")[^"]*?)*$)