Автор Тема: `name`=\'value\', `name2` = \'value , \\\' value\'  (Прочитано 4990 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
`name`=\'value\', `name2` = \'value , \\\' value\'
« : 13 Февраля 2008, 13:04:42 »
Здравствуйте. Прошу помочь с написанием правильного выражения. Пишу на Perl, но думаю, что правильнее задать вопрос в этом разделе.
Имеется строка:
`name`=\'value\',  `name2`   =    \'value , \\\'  value\'
Как я могу вырезать все пробелы, кроме тех которые заключены между ` или \' Перепробовал уже массу вариантов, но находятся случаи, при которых работа будет выполнена не верно. Очень надеюсь на помощь.

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
`name`=\'value\', `name2` = \'value , \\\' value\'
« Ответ #1 : 14 Февраля 2008, 10:44:06 »
можно ли попросить вас уточнить задачу. Набор исходных строк и какой должен быть результат?
убили кенни, сволочи

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
`name`=\'value\', `name2` = \'value , \\\' value\'
« Ответ #2 : 14 Февраля 2008, 12:39:41 »
$text = qq|`name`=\'value\',  `name2`   =    \'value , \\\'  value\'|; # исходная строка
После некоторых действий должно получиться
$text = qq|`name`=\'value\',`name2`=\'value , \\\'  value\'|; # результат

Там где значение name2 по середине должна быть экранированная кавычка, но форум не дает это изобразить. Вообщем `name2`=\'value , \\ \'  value\', без пробела только между слешем и одинарной кавычкой. Надеюсь не запутал вас.
« Последнее редактирование: 14 Февраля 2008, 12:45:24 от xmolex »

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
`name`=\'value\', `name2` = \'value , \\\' value\'
« Ответ #3 : 14 Февраля 2008, 18:15:02 »
my $text = q|`name`=\'value\',  `name2`   =    \'value , \\\\\'  value\'|;
$text =~ s/=\\s+\'/=\'/g;
$text =~ s/`\\s+=/`=/g;
$text =~ s/,\\s+`/,`/g;
print $text;

подойдет?
убили кенни, сволочи

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
`name`=\'value\', `name2` = \'value , \\\' value\'
« Ответ #4 : 14 Февраля 2008, 19:15:50 »
Конкретно под этот пример бы подошло, но проблема в том, что заранее я не знаю значений. А если в качестве значения передадут текст:
    =     , тогда первое же выражение нарушит его.
Я имею ввиду, что может быть такая конструкция:

my $text = q|`name`=\'value\',  `name2`   =    \'value , \\ \'  =     value\'|;
my $text = q|`name`=\'value\',  `name2`   =    \'value , \\ \'  ,,,   =    ,,,   `````value\'|;
my $text = q|`name`=\'value\',  `name2`   =    \'value , \\ \'  value\'|;

Как видите после символа "=" мы встречаем окрывающую и закрывающую одинарную кавычку. Так вот между этими кавычками может быть все что угодно, даже символ одинарной кавычки, но он должен быть экранирован. Нужно просто убрать все пробелы, кроме тех которые являются значениями, т.к. значением может быть текст, а текст должен оставаться неизменным.

Оффлайн andymc

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 400
  • +1/-0
  • 0
    • Просмотр профиля
`name`=\'value\', `name2` = \'value , \\\' value\'
« Ответ #5 : 14 Февраля 2008, 23:02:55 »
Предлагаю сначала заменить все куски текста в кавычках на какой-то набор символов например $$$xxx1, $$$xxx2 и т.д., потом удалить пробелы и произвести обратную замену наборов символов на куски текста.
С помощью одних регулярных выражений это будет сложно.

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
`name`=\'value\', `name2` = \'value , \\\' value\'
« Ответ #6 : 22 Февраля 2008, 11:53:37 »
Вообщем, решил отказаться от регулярных выражений в этом случае. Решил обрабатывать посимвольно строку. Если кому интересно, то http://forums.webscript.ru/showthread.php?s=&threadid=26519, но там уже perl.
« Последнее редактирование: 22 Февраля 2008, 12:07:35 от xmolex »

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28