Получение списка определений из строки

программирование php regexp

Есть строка:
e<a1>t<b1>r<a2>a<b1>s<b2>h<b3>.<b4>a<a3>n<b1>d<b2>.<b3>u<b4>n<b5>w<a4>a<b1>n<b2>t
Нужно регулярное выражение, получающее из подобной строки список вида:
a1
b1
a2
b1
b2
b3
b4
a3
b1
b2
b3
b4
b5
a4
b1
b2

Сам что-то проскальзываю.

Примечание:
to: NetRain (Alexander Borovikov)
Будь это так просто, я бы не спрашивал. a и b - не просто символы, а вполне произвольные строки, причём весьма разные (что особенно важно)

Примечание:
to: NetRain (Alexander Borovikov)
Вы напрасно привязываетесь к символам <> - они тут только для наглядности. Привязываться можно только к (a\d) и (b\d) (их и нужно выбирать)
Определять строку через символьный класс - это слишком смело, так мы мусора насобираем.

Примечание:
Хорошо, описываю более лучше:
есть HTML страница, на ней есть "термины" (то самое a) и "определения" (b). И термины и определения - это набор тэгов, между ними возможно наличие любого количества любых символов не образующих ни термины, ни определения.
Задача прежняя - вытащить список терминов и соответствующих определений.

Примечание:
"Так может проще использовать DOM..."
Проще, но не лучше. Частную задачу я уже решил. И да, её можно решить с помошью DOM, XPATH, SAX, но мне это не интересно, т.к. вполне очевидно КАК это сделать. Меня интересует решение ИМЕННО С ПОМОЩЬЮ РЕГУЛЯРНОГО ВЫРАЖЕНИЯ.
Считайте что вам на собеседовании дали такую вот задачу. И данные в общем случае совсем необязательно структурированы.
Единственно что мы можем на 100% - найти в данных конструкции вида "a" (термин) и вида "b" (определение).
Ответы:
preg_match_all('/<([a-z0-9]+)>/i', $text, $matches);
ну моя регулярка выберет любые буквы и цифры между символов < и >
Нужно что-то большее - замените символьный класс (квадратные скобки) на что-либо менее строгое, например:
preg_match_all('/<[^>]+)>/', $text, $matches);
Ну как вы суть проблемы описали, так я и ответил :-)
Если у вас обязательно идет последовательность a или b и затем одна цифра, то и делайте
preg_match_all('/(a|b)\\d/U', $text, $matches);
Смотрим $matches[0]
Так может проще использовать DOM, чтобы была возможность достаточно легко работать со структурированными данными (блоками/элементами страницы)?
$html_page = new DOMDocument();
$html_page->loadHTML($html_code);
...


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.