![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| _Alex |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 9.3.2007 Репутация: нет Всего: нет |
Как запретить 2+ повторения строки, в регулярном выражении?
Допустим есть текст:
------------------- Регулярное выражение:
Как сделать чтобы "результат 2", не соответствовал регулярному выражению? т.е. Как составить регулярное выражение, чтобы <br class="lb"><a class="res" href="([^"]+)">(Всё кроме </a>)</a><br></span>
|
||||||
|
|||||||
| W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Слишком мало условий начальных. Как ты предлогаешь отличать первый результат от второго? Можно по закрывающему тегу </span>, но тогда "Обратите внимание, это тоже содержит совпадение 1" тоже попадает под правильное условия, можно делать ретроспективную проверку на </span>, но тогда самый первый результат в файле не будет учтён. В общем, я что-то не могу увидеть чётких отличий по которым можно составить маску...
Давай определимся в чём у нас есть отличия между:
и
Только в значении тега href? Тогда от него и надо плясать. У меня выражение: <br class="lb">(\x0D\x0A)?<a class="res" href="([^"]+)">([^<>]+?)(\1)?</a>(\1)?<br>(\1)?</span> Совпадает как раз с двуям этими участками, вот первый от второго как-то отличить надо. Это сообщение отредактировал(а) W4FhLF - 2.6.2007, 10:40 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
| W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Ну вот, единственная мысль делать так:
Тогда будет такой результат:
Потом первые два символа искусственно отсекать. Но опять же, неизвестно есть ли наверняка перед первым результатом два каких-либо символа? -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
| _Alex |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 9.3.2007 Репутация: нет Всего: нет |
W4FhLF, Я имею в виду
На данный момент, Если выполнить код с моим рэгэкспом, то найденный второй полный результат $0 (второй цикл while, см. код) это вся разметка после "<!------результат 2-------->", а $2 в этом результате <br class="lb"><a class="res" href="([^"]+)">(.+?)</a><br></span> это:
А мне надо чтобы 1 и 2 полные результаты ($0), были те которые ты выделил. И соответственно $2 во втором полном результате был "Обратите внимание, это тоже содержит совпадение 1" |
||||
|
|||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
_Alex, у меня boost не стоит и ставить неохото, я проверяю на другом движке и поэтому извини, твой пример заюзать не могу. Давай ты просто мне скажешь, что тебе надо получить на выходе, прям покажи на куске текста, который привёл.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| _Alex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 9.3.2007 Репутация: нет Всего: нет |
Нужны результаты ($0 -- весь найденный текст, $1,$2 -- то что в скобках рэгэкспа): $0 = <br class="lb"> <a class="res" href="$1">$2 </a> <br></span> Одним рэгэкспом в boost наверно не обойтись, придётся делать еще цикл поиска в каждом найденном $0 или писать свою функцию по извлечению результатов. |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
В перле есть такая возможность, а вот насчёт boost::regex я не в курсе, подозреваю, что придётся циклом. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |