Автор Тема: Знатокам регулярных выражений  (Прочитано 3134 раз)

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

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Знатокам регулярных выражений
« : 25 Февраля 2003, 15:36:44 »
А знает кто-нибудь шаблона для ф-ции split, чтобы правильно разбить csv-строку.

Например это "a""a;a";"b""""b;b";""";"";" должно так разбиваться:
$a[0]:  a"a;a
$a[1]:  b""b;b
$a[2]:  ";";

А вот можно ли такое с помощью одного шаблона сделать?(я имею ввиду без того, чтобы дополнительно ещё раз строку проходить-просматривать и т.п.)
« Последнее редактирование: 25 Февраля 2003, 18:08:32 от Evgeny »

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Знатокам регулярных выражений
« Ответ #1 : 25 Февраля 2003, 15:45:43 »
@a = split(\'\\";\\"\', $text); ?
The documentations is your friend

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Знатокам регулярных выражений
« Ответ #2 : 25 Февраля 2003, 16:51:03 »
NeoNox, он имел в виду, что точка с запятой экранируется кавычками.

Я бы сделал проходом строки по символу в цикле считая кавычки - т.е. если кавычки открыты не разбивать по  \';\', а если закрыты - то выделить с пред. \';\' по substr.
Ну и конечно есть
Text::CSV и DBD::CSV - можно посмотреть как они написаны.
« Последнее редактирование: 25 Февраля 2003, 16:59:43 от Chs »
2B OR NOT 2B = FF

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Знатокам регулярных выражений
« Ответ #3 : 25 Февраля 2003, 17:12:12 »
Цитировать
Ну и конечно есть
Text::CSV и DBD::CSV

Я с DBD::CSV когда-то работал.
Там с "левым" форматом csv лучше не подходить.
В любом случае ему sep_char нужно задавать.
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Знатокам регулярных выражений
« Ответ #4 : 25 Февраля 2003, 17:28:21 »
Вот это я, кстати, не понял, почему в первом случае нет \';\' а во втором есть?
$a[0]: a"aa
$a[1]: b""b;b
The documentations is your friend

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Знатокам регулярных выражений
« Ответ #5 : 25 Февраля 2003, 18:08:15 »
NeoNox
Цитировать
Вот это я, кстати, не понял, почему в первом случае нет \';\' а во втором есть?
$a[0]: a"aa
$a[1]: b""b;b

Сорри, сейчас исправлю вверху.

Кавычка экранируется кавычкой, т.е. a"a  -> a""a
А если в поле содержится ; то всё поле заключается в кавычки:
a;a  -> "a;a"
Соединяем всё вместе и получаем:
b""b;b -> "b""""b;b"

 

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