@tooq

Как увеличить максимальное число обратных ссылок в регулярных выражениях (sed)?

Суть вопроса в следующем, есть длинное и неприятное регулярное выражение, которое я написал для парсинга базы данных адресов:
s/"([0-9]*)";"((г\. )*(([^ ]*))(( обл\.)|( АО\.)|( Респ\.))*)(, )*((.*) р-н)*(, )*((п\/о\.) ([^,]*))*(, )*(((д\.)|(ж\/д_рзд\.)|(рп\.)|(ж\/д_ст\.)|(ст\.)|(высел\.)|(х\.)|(казарма\.)|(м\.)|(жилрайон\.)|(нп\.)|(снт\.)|(г\.)|(дп\.)|(снт\.)|(п\.)|(пст\.)|(п\/ст\.)|(пгт\.)|(п\/гт\.)|(с\.)|(тер\.)|(массив\.))( [^,]*))*(, )*(((д\.)|(ж\/д_рзд\.)(снт\.)|(г\.)|(дп\.)|(нп\.)|(мкр\.)|(жилзона\.)|(снт\.)|(п\.)|(пст\.)|(п\/ст\.)|(пгт\.)|(п\/гт\.)|(с\.)|(тер\.)|(массив\.))( [^,]*))*(, )*((.* )((ул\.)|(пер\.)|(наб\.)|(ш\.)|(линия\.)|(казарма\.)|(б-р\.)|(тер\.)|(уч-к\.)|(пр-кт\.)|(сад\.)|(остров\.)|(канал\.)|(дор\.)|(км\.)|(городок\.)|(тракт\.)|(гск\.)|(просек\.)|(переезд\.)|(заезд\.)|(парк\.)|(площадь)|(проезд\.)|(туп\.)|(м\.)|(проток\.)|(ст\.)|(вал\.)|(п\.)|(спуск\.)|(пл-ка\.)|(д\.)|(коса\.)|(п\/ст\.)|(пр\.)|(пл\.)|(мкр\.)|(аллея\.)|(кв-л\.)|(ж\/д_будка\.)|(х\.)|(рзд\.)|(тск\.)|(сквер\.)|(стр\.)|(снт\.)|(мост\.)|(метро\.)))*(, )*";"([0-9]*)";"(((д\.)|(ая\.)|(нетр\.)|(д\.)|(а\\я\.)|(а\/я\.))*(([0-9Х]*[-\\\/0-9]*)([\\\/-]([А-Яа-я])*)*))*([^"]*)";"(([0-9]*)([А-Яа-я]*))*"/"\2";"\68";"69";"120";"130"/

Мне нужно привести эту БД к другому формату, собрался это делать с помощью sed и обратных ссылок (\1, \2...), но вот незадача - sed поддерживает обратные ссылки только от \1 до \9, а у меня их 130 штук. Есть ли какие-нибудь варианты?
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
saboteur_kiev
@saboteur_kiev
software engineer
Использовать НЕ регулярки.
У каждого инструмента есть свое назначение, и регулярки были инструментом помогающему парсить, а не самим парсером.
Можете вместо SED использовать что-то другое, где поддерживается больше бэкреференсов. Но лучше перепишите на перл или питон.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы