Программирование > Регулярные выражения
`name`=\'value\', `name2` = \'value , \\\' value\'
xmolex:
Здравствуйте. Прошу помочь с написанием правильного выражения. Пишу на Perl, но думаю, что правильнее задать вопрос в этом разделе.
Имеется строка:
--- Код: ---`name`=\'value\', `name2` = \'value , \\\' value\'
--- Конец кода ---
Как я могу вырезать все пробелы, кроме тех которые заключены между ` или \' Перепробовал уже массу вариантов, но находятся случаи, при которых работа будет выполнена не верно. Очень надеюсь на помощь.
ravshaniy:
можно ли попросить вас уточнить задачу. Набор исходных строк и какой должен быть результат?
xmolex:
--- Код: ---$text = qq|`name`=\'value\', `name2` = \'value , \\\' value\'|; # исходная строка
--- Конец кода ---
После некоторых действий должно получиться
--- Код: ---$text = qq|`name`=\'value\',`name2`=\'value , \\\' value\'|; # результат
--- Конец кода ---
Там где значение name2 по середине должна быть экранированная кавычка, но форум не дает это изобразить. Вообщем `name2`=\'value , \\ \' value\', без пробела только между слешем и одинарной кавычкой. Надеюсь не запутал вас.
ravshaniy:
--- Код: ---my $text = q|`name`=\'value\', `name2` = \'value , \\\\\' value\'|;
$text =~ s/=\\s+\'/=\'/g;
$text =~ s/`\\s+=/`=/g;
$text =~ s/,\\s+`/,`/g;
print $text;
--- Конец кода ---
подойдет?
xmolex:
Конкретно под этот пример бы подошло, но проблема в том, что заранее я не знаю значений. А если в качестве значения передадут текст:
--- Код: --- =
--- Конец кода ---
, тогда первое же выражение нарушит его.
Я имею ввиду, что может быть такая конструкция:
--- Код: ---
my $text = q|`name`=\'value\', `name2` = \'value , \\ \' = value\'|;
my $text = q|`name`=\'value\', `name2` = \'value , \\ \' ,,, = ,,, `````value\'|;
my $text = q|`name`=\'value\', `name2` = \'value , \\ \' value\'|;
--- Конец кода ---
Как видите после символа "=" мы встречаем окрывающую и закрывающую одинарную кавычку. Так вот между этими кавычками может быть все что угодно, даже символ одинарной кавычки, но он должен быть экранирован. Нужно просто убрать все пробелы, кроме тех которые являются значениями, т.к. значением может быть текст, а текст должен оставаться неизменным.
Навигация
Перейти к полной версии