Помогите с регулярным выражением. |
Здравствуйте, гость ( Вход | Регистрация )
Помогите с регулярным выражением. |
Razerio |
25.1.2013, 22:55
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 13 Регистрация: 16.1.2013 Пользователь №: 3677 Спасибо сказали: 1 раз(а) Репутация: 0 |
Никак не получается составит работающее регулярное выражение.
Есть примерный текст:
Из текста нужно вытащить все слова начинающиеся со звёздочки(*), кроме тех, что находятся между "<a" и "</a>". То есть в данном случаи должны найтись слова: *must *materials *distribution А остальные должны быть пропущены. Все слова найти довольно просто "[*]+[A-Za-z]+", но вот найти только те, которые вне HTML тегов незнаю как. P.S. Для работы с регулярками использую дефолтный QRegExp (Qt 4.8.4). |
|
|
call_me_Frank |
18.8.2013, 11:44
Сообщение
#2
|
Студент Группа: Участник Сообщений: 73 Регистрация: 20.10.2010 Пользователь №: 2129 Спасибо сказали: 0 раз(а) Репутация: 0 |
iReset, растолкуй, пожалуйста, вот эту часть выражения:
(?:[^*]*<a\\s(?:.(?!<\\/a>))*.<\\/a>)? где можно почитать про все элементы, допустимые в QRegExp? потому что я еще нигде не встречал описание конструкций, типа ?! и ?:... спасибо |
|
|
Razerio |
18.8.2013, 23:22
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 13 Регистрация: 16.1.2013 Пользователь №: 3677 Спасибо сказали: 1 раз(а) Репутация: 0 |
iReset, растолкуй, пожалуйста, вот эту часть выражения: (?:[^*]*<a\\s(?:.(?!<\\/a>))*.<\\/a>)? Я не iReset, но попытаюсь: (?: ) — пассивная группа, отличается от обычной тем, что при нахождении не записывается в QRegExp.cap(...) [^*] — Любые символы за исключением звёздочки длинной от 0 символов. * — Определяет длину искомых символов, стоящих перед ним, от 0 до бесконечности <a — просто текст "<a" \\s — один пробел . — один любой символ, за исключением переноса строки (?! ) — отрицательное вперёд смотрящее, означает, что после искомого текста не должен находится текст стоящий после ?! <\\/a> — просто текст </a> (прим.: поскольку символ / зарезервированный, то для его использования в качестве обычного текста, его нужно экранировать символами \\) ? — означает, что символ или группа стоящая перед ним может игнорироваться. (прим.: В тексте <p>some text</p>, с помощью регулярного выражения <\\/?p>, можно найти сразу открывающий <p>, и закрывающий тег </p>. Так как в данном случаи символ /, не является обязательным) Описание класса QRegExp, есть на официальном сайте http://qt-project.org/doc/qt-5.0/qtcore/qregexp.html А ещё вот шпаргалка, правда она не совсем по QRegExp, но тоже бывает полезна: |
|
|
Текстовая версия | Сейчас: 25.11.2024, 18:28 |