LINUX.ORG.RU

Регулярное выражение нужна правка.

 


0

1

Привет, нужно собрать регулярку, на выходе которой содержимое тега со вложенными подтегами и т.д. Пример строки: <Table> <Country>Russian Federation</Country> <City>Jakutsk</City> </Table> <Table> <Country>Russian Federation</Country> <City>Cul'Man</City> </Table> Моя регулярка:(<Table>+[\d\D]+</Table>) выдает строку полностью, понимаю, что нужно вот так:(<Table>+[\d\D]+**^</Table>**+</Table>) но не могу понять как написать то, что внутри звездочек. т.е. как прописать сравнение со строкой а не с набором символов. Натолкните на мысль пожалуйста.

Ответ на: комментарий от dickunc

Попроверяй вживую на regex101.com

Я ничего умнее, чем <Table>(.*)</Table>, не придумал. Оно работает, но это нельзя назвать решением.

Deleted
()

тебе нужно в библиотеке которая разбирает регулярки отключить «жадность», тогда оно будет забирать не все таблицы, а до первого попадания.

Deleted
()
Ответ на: комментарий от Deleted

Получится ли при этом следующее подходящее забрать? т.е. в результате получить массив всех вхождений.

dickunc
() автор топика
Ответ на: комментарий от dickunc

это ты спрашивай у кода который это делает, а не у меня

Deleted
()

Описанный язык не является регулярным. Решить задачу с помощью регулярных выражений нельзя.

Используйте другие инструменты.

anarquista ★★★★★
()
Ответ на: комментарий от dickunc

толкь вот [\d\D] - можно заменить простой точкой

Deleted
()

Тред не читал, XML-парсер уже советовали?

theNamelessOne ★★★★★
()
Ответ на: комментарий от Deleted

Т.е. ты хочешь сказать, что где-то жадность рег. выр. ограничивается не "?" ?

pru-mike ★★
()
Ответ на: комментарий от anarquista

Язык тут не описывался, и для конкретно такого вида данных задача решается.

<table>(.*?)</table>

Херли тут мусолить на полтреда — вообще загадка. С каждым годом это болото все чернее.

anonymous
()

https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtm...

Если это валидный XML и тебе нужно с ним коывряться из шелла, то используй xmlstarlet. Если в языке есть библиоткека - используй. Если всё плохо или у тебя особенная причина, то парсер для того что я вижу всё равно будет написать очень легко.

Deleted
()

Натолкните на мысль пожалуйста.

Парсить html регулярками моветон.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.