Forum Webscript.Ru
Программирование => Регулярные выражения => Тема начата: xmolex от 13 Февраля 2008, 13:04:42
-
Здравствуйте. Прошу помочь с написанием правильного выражения. Пишу на Perl, но думаю, что правильнее задать вопрос в этом разделе.
Имеется строка:
`name`=\'value\', `name2` = \'value , \\\' value\'
Как я могу вырезать все пробелы, кроме тех которые заключены между ` или \' Перепробовал уже массу вариантов, но находятся случаи, при которых работа будет выполнена не верно. Очень надеюсь на помощь.
-
можно ли попросить вас уточнить задачу. Набор исходных строк и какой должен быть результат?
-
$text = qq|`name`=\'value\', `name2` = \'value , \\\' value\'|; # исходная строка
После некоторых действий должно получиться
$text = qq|`name`=\'value\',`name2`=\'value , \\\' value\'|; # результат
Там где значение name2 по середине должна быть экранированная кавычка, но форум не дает это изобразить. Вообщем `name2`=\'value , \\ \' value\', без пробела только между слешем и одинарной кавычкой. Надеюсь не запутал вас.
-
my $text = q|`name`=\'value\', `name2` = \'value , \\\\\' value\'|;
$text =~ s/=\\s+\'/=\'/g;
$text =~ s/`\\s+=/`=/g;
$text =~ s/,\\s+`/,`/g;
print $text;
подойдет?
-
Конкретно под этот пример бы подошло, но проблема в том, что заранее я не знаю значений. А если в качестве значения передадут текст:
=
, тогда первое же выражение нарушит его.
Я имею ввиду, что может быть такая конструкция:
my $text = q|`name`=\'value\', `name2` = \'value , \\ \' = value\'|;
my $text = q|`name`=\'value\', `name2` = \'value , \\ \' ,,, = ,,, `````value\'|;
my $text = q|`name`=\'value\', `name2` = \'value , \\ \' value\'|;
Как видите после символа "=" мы встречаем окрывающую и закрывающую одинарную кавычку. Так вот между этими кавычками может быть все что угодно, даже символ одинарной кавычки, но он должен быть экранирован. Нужно просто убрать все пробелы, кроме тех которые являются значениями, т.к. значением может быть текст, а текст должен оставаться неизменным.
-
Предлагаю сначала заменить все куски текста в кавычках на какой-то набор символов например $$$xxx1, $$$xxx2 и т.д., потом удалить пробелы и произвести обратную замену наборов символов на куски текста.
С помощью одних регулярных выражений это будет сложно.
-
Вообщем, решил отказаться от регулярных выражений в этом случае. Решил обрабатывать посимвольно строку. Если кому интересно, то http://forums.webscript.ru/showthread.php?s=&threadid=26519, но там уже perl.