Multiline Regex не работает с вкладками

У меня есть большой текстовый файл с некоторыми примечаниями в TextWrangler, который я хочу проанализировать с Regex и записать совпадения в файл CSV для импорта MySQL. Вот пример источника:

ARCHIVE

02.09.2014 22:35 

title1
content
content
content
content

30.08.2014 18:13 

title2
content
    content with tab
    content with tab
content

...
more notes as above
...

Каждая заметка начинается с даты, окруженной возвратами, затем заголовка и некоторых строк содержимого. В настоящее время я тестирую следующее Regex в диалоге поиска TW с проверкой Grep, чтобы получить дату, заголовок и блок контента для каждой заметки:

\r(\d\d\.\d\d\.\d\d\d\d \d\d:\d\d)\s*\r\r(.+)(?s)((?:(?!\r\d\d\.\d\d\.\d\d\d\d \d\d:\d\d\s*\r).)*)

То, что это делает, ищет дату, окруженную возвратами, затем захватывает строку заголовка и, наконец, все последующие строки при условии, что другой блок даты не встречается. Последний использует непривлекательный негативный взгляд. Перед последним шагом настройка DOTALL активируется с помощью (?s) в том числе возвращается в метасимволе точки.

С примером источника выше, Find работает для первой заметки, но не для второй, где некоторые строки имеют отступ с вкладками. TW показывает эту ошибку:

Вот где я застрял. Кто-нибудь может дать мне подсказку?

2 ответа

Не разрешено комментировать, я должен "ответить"...

  • Ваше регулярное выражение прекрасно работает в TW 4.5.9 (10.9.5).
  • Это работает также с пропущенным битом "без захвата" - в TW 4.5.9 (на 10.9.5). (По крайней мере, для матчей, то есть. Не проверял его захваты.)
  • В TW 4.5.9 веб-адреса также не вызывают проблемы.

возможно

\r(\d{2}\.\d{2}\.\d{4} \d{2}:\d{2})\s*\r\r(.+\r)((.+\r)+)(?!\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}\s*\r)

действительно служит вашей цели (в TW 3.5.3 и 10.9.4. За исключением разрывов ведущей / задней линии (которые, конечно, могут быть добавлены при необходимости) в TW 4.5.9, ее захваты, похоже, идентичны вашим).

Я протестировал шаблон еще раз и обнаружил, что сбой Regex/Grep действительно непредсказуем.

Похоже, что это связано с вкладками в источнике, но может быть другой текст, который вызывает ошибку. Например, я обнаружил, что рабочий раздел "заметки", содержащий вкладки, начал давать сбой, когда был добавлен веб-URL.

Я использую TextWrangler 3.5.3 на Mavericks 10.9.4, который был обновлен с Snow Leopard. У меня было много неясных проблем в этой системе, в том числе в Apple Mail и других приложениях, поэтому я думаю, что ошибка TW может быть связана с проблемой Mavericks. Причина, по которой я использую более старую версию TW, заключается в том, что мне не нравится боковая панель слева.

Как я сказал в своем комментарии, есть SO вопросы о проблемах Grep с BBedit/TW, и они, похоже, не возникают из движка PCRE Regex как такового, а скорее из кода BBedit. Конечно, ТАК не может помочь в этом.

Другие вопросы по тегам