The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"perl regexp: экранированные кавычки в значениях в кавычках"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"perl regexp: экранированные кавычки в значениях в кавычках"  
Сообщение от devcoder (ok) on 10-Дек-08, 17:58 
Привет.

Хотелось бы определить perl regexp для такой задачи.

Допустимые варианты строк:


1) имя = "Василий Тёркин" бла-бла
2) имя = 'Он же' бла-бла
3) имя = 'Д\'артаньян или как там его' бла-бла
4) имя = "Д'артаньян или как там его"  бла-бла
5) имя = "ООО \"Базар-Вокзал\"" бла-бла
6) имя = 'ООО "Базар-Вокзал"' бла-бла

Желательно получить однострочник,
который вырезает текст, заключённые в кавычки,
или я много хочу? :-)

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "perl regexp: экранированные кавычки в значениях в кавычках"  
Сообщение от angra (ok) on 11-Дек-08, 01:46 
Да ничего сложного,
регекс: /(["'])(.*?)(?<!\\)\1/

вам нужен вывод $2, например так print "$2\n" if /(["'])(.*?)(?<!\\)\1/

вывод на вашем тексте:
Василий Тёркин
Он же
Д\'артаньян или как там его
Д'артаньян или как там его
ООО \"Базар-Вокзал\"
ООО "Базар-Вокзал"

А вот экранированием от шелла для получения однострочника займитесь самостоятельно :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "perl regexp: экранированные кавычки в значениях в кавычках"  
Сообщение от devcoder (ok) on 11-Дек-08, 15:56 
Спасибо angra, спасибо perl.

Совсем забыл, строка

имя = Вася

также валидна и как раз она не подходит под регекс.

Привожу пример (несколько усложнил пример и на ruby1.9, но думаю понятно будёт)


irb(main):010:0> "  \tname = \t'value d\'one' ".sub!(/^[\s]*([^\s#;=]+)[\s=]*([\"'])?(.*?)(?<!\\)\2\s*$/, '[\1] = [\2][\3]')
=> "[name] = ['][value d'one]"
irb(main):011:0> "  \tname = \tvalue d\'one ".sub!(/^[\s]*([^\s#;=]+)[\s=]*([\"'])?(.*?)(?<!\\)\2\s*$/, '[\1] = [\2][\3]')
=> nil

Пустой "\2" - не отрабатывает?

Да, и негативное загляд. назад (?<!\\) не работает.


irb(main):013:0> "  \tname = \t'value \'one\' ".sub!(/^[\s]*([^\s#;=]+)[\s=]*([\"'])?(.*?)(?<!\\)\2\s*$/, '[\1] = [\2][\3]')
=> "[name] = ['][value 'one]"

Хотя может дело в zsh или regexp ruby.
Как нативно (и проще/быстрее) проверить в perl-e.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "perl regexp: экранированные кавычки в значениях в кавычках"  
Сообщение от devcoder (ok) on 11-Дек-08, 16:10 
>Спасибо angra, спасибо perl.
>
>Совсем забыл, строка
>
имя = Вася

>также валидна и как раз она не подходит под регекс.

Пардон, с этим разобрался s/([\"'])?/([\"']?)/

>Да, и негативное загляд. назад (?<!\\) не работает.
>Хотя может дело в zsh или regexp ruby.
>Как нативно (и проще/быстрее) проверить в perl-e.

/^[\s]*([^\s#;=]+)[\s=]*([\"']?)(.*?)(?<!\\)\2\s*$/
А вот это (?<!\\) -- не поборол.
Есть мнения?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру