Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Еще одна задачка на регулярные выражения 
:(
    Опции темы
Suppir
Дата 14.4.2010, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



$line = 'Item1, "Folk, NewAge и Flamenco (DVD Video)", Item2,';

Нужно эту строку разбить в массив по определённому делителю (запятая). Но этот разделитель нужно проигнорировать, если он находится внутри кавычек.
Т.е. нужно получить элементы:

Item1
"Folk, NewAge и Flamenco (DVD Video)"
Item2




кавычек может быть много, но они 1) не вложенные 2) всегда парные.
запятых внутри кавычек может быть много.


PM MAIL   Вверх
arto
Дата 14.4.2010, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



perldoc Text::Balanced
PM MAIL ICQ   Вверх
Logo
Дата 15.4.2010, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 3
Всего: 10



Код

@result = /(?:[^,]+|"[^"]*")++/g;

PM MAIL   Вверх
Suppir
Дата 15.4.2010, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Logo, таким образом получается результат:

Item1
 "Folk
 NewAge и Flamenco (DVD Video)"
 Item2


а нужно, чтобы получалось:

Item1
"Folk, NewAge и Flamenco (DVD Video)"
Item2


т.е. нельзя разделять по запятой, которая внутри кавычек.

Добавлено через 4 минуты и 35 секунд
Короче, вот решение (не мое):

(?:[^,]++|,(?!([^"'']*+(?:"[^"]*+"|''[^'']*+'')?)*$))+



Это сообщение отредактировал(а) Suppir - 15.4.2010, 11:07
PM MAIL   Вверх
Logo
Дата 15.4.2010, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 3
Всего: 10



Исправлено
Код

@result = /(?:[^",]+|"[^"]*")++/g;

PM MAIL   Вверх
Suppir
Дата 15.4.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Круто!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0490 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.