Изолировать поле SQL с помощью регулярных выражений - PullRequest
1 голос
/ 02 апреля 2010

Я пытаюсь выделить определенное поле в файле дампа SQL, чтобы я мог его отредактировать, но мне не повезло.

Регулярное выражение, которое я использую:

^(?:(?:'[^\r\n']*'|[^,\r\n]*),){6}('[^\r\n']*'|[^,\r\n]*)

Который должен захватить седьмое поле и поместить его в ссылку 1.

Проблема в том, что это спотыкается, когда он находит запятую в текстовом поле и считает частичное совпадение допустимым.

Например. (1, «Заголовок», 1, 3, «2006-09-29», «Запятые, проклятие моего регулярного выражения», «Это цель», 2, 4) вместо этого соответствует «проклятию моего регулярного выражения» » "Это цель".

Ответы [ 5 ]

4 голосов
/ 02 апреля 2010

Может быть проще загрузить SQL во временную базу данных, а затем выполнить SELECT для получения данных в этом поле.

2 голосов
/ 02 апреля 2010

У вас есть контроль над файлом дампа, или он является историческим или находится вне вашего контроля?

Если вы можете выбрать лучший разделитель, запятая действительно ужасный выбор.

1 голос
/ 02 апреля 2010

[^, \ r \ n] *, соответствует

'Commas,

Вместо этого я предлагаю [^, \ r \ n '] *.

0 голосов
/ 02 апреля 2010

Doh!

Мои поля не были разделены запятой. Они были разделены запятой и пробелом.

Правильный RegEx -

^(?:(?:'[^\r\n']*'|[^,\r\n]*), ){6}('[^\r\n']*'|[^,\r\n]*)

Теперь это работает.

Извините, что трачу ваше время на это. Именно ответ Беты заставил меня задуматься, поскольку это было второе чередование в игре для всех полей. Дополнительный пробел заставил его использовать эту опцию вместо опции, заключенной в кавычки.

0 голосов
/ 02 апреля 2010

Я думаю, вам повезет больше, если вы сделаете регулярное выражение более конкретным. Я не проверял это, но я считаю, что это должно работать.

Также, как полагает Пол, вы можете попробовать использовать другой разделитель, чтобы облегчить это.

Наслаждайтесь!

\d{1,4}(,){1}('){1}[a-zA-Z0-9,]+('){1}\d{1,4}(,){1}\d{1,4}(,){1}('){1}[0-9-]+('){1}(,){1}('){1}[a-zA-Z0-9,]+('){1}(,){1}('){1}[a-zA-Z0-9,]+('){1}(,){1}\d{1,4}(,){1}\d{1,4}(\r\n){1}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...