Russian Qt Forum
Ноябрь 24, 2024, 21:50
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
поиск по QRegExp
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: поиск по QRegExp (Прочитано 10474 раз)
spigel
Гость
поиск по QRegExp
«
:
Сентябрь 14, 2007, 17:04 »
Всем привет!
использую QRegExpv2, можно смотреть в примере examples/tools/regexp
в строке aaa{A:48:3} {A:48:3} пытаюсь обнаружить слово {A:48:3} с шаблоном \b\{A:48:3\}\b
буквы \b обозначают границы слова, перед { стоит \ = т.к. { - является спецзнаком в QRegExp
в результате поиск возвращает -1
но как только я меняю текст на aaa{A:48:3}r {A:48:3}, то мне выдает index of match = 3,
которое указывает на середину слова aaa{A:48:3} когда в шаблоне точно указан поиск по границам слов!
в итоге если текст будет {A:48:3}, а шаблон \b\{A:48:3\}\b - то результат отрицательный - текст не найден!
Как построить правильный шаблон в таком случае?
Записан
Tonal
Гость
Re: поиск по QRegExp
«
Ответ #1 :
Сентябрь 14, 2007, 17:24 »
Словом в языке регулярных выражений называется непрерывная последовательность из одного или более символов алфавита цифр и "_"...
Так что последовательность {A:48:3} словом не является.
Указывая \b перед и после этой последовательности, ты требуешь, чтобы непосредственно к ней прилегали "слова".
Так что всё отрабатывает верно. Другое дело, что может тебе надо не совсем это.
Что именно тебе надо? Почему не написать просто:
line.indexOf
("{A:48:3}")
Записан
spigel
Гость
Re: поиск по QRegExp
«
Ответ #2 :
Сентябрь 17, 2007, 09:11 »
надо построить шаблон для поиска такой последовательности, так чтобы к последовательности могли прилегать символы разделения слов (пробел, табуляция и т.п == isWhiteSpace().
именно в режиме RegExpv2 - не переключаясь в whildcard или fixed string
Записан
spigel
Гость
Re: поиск по QRegExp
«
Ответ #3 :
Сентябрь 17, 2007, 09:20 »
Цитата: Tonal от Сентябрь 14, 2007, 17:24
последовательность {A:48:3} словом не является.
Указывая \b перед и после этой последовательности, ты требуешь, чтобы непосредственно к ней прилегали "слова".
Так что всё отрабатывает верно. Другое дело, что может тебе надо не совсем это.
в любом случае указывая \b я требую что в этом месте была граница слова (word boundary),
я не устанавливаю никаких требований к объектам прилегающим к моей последовательности (слова они, цифры или рисунки).
Главное чтобы мою последовательность отделяло от них границей. поэтому нет термина начало границы, конец, а есть просто требование по последовательности: граница...символы...граница
////////////
Незнаю, баг или нет это ... но как построить правильный шаблон в этом случае?
Записан
Tonal
Гость
Re: поиск по QRegExp
«
Ответ #4 :
Сентябрь 17, 2007, 10:17 »
Ещё раз:
Если тебе надо найти в тексте именно "{A:48:3}" то почему тебе не использовать просто поиск подстроки?
Зачем тебе нужны регулярные выражения?
Записан
spigel
Гость
Re: поиск по QRegExp
«
Ответ #5 :
Сентябрь 17, 2007, 10:51 »
чтобы решить задачу, уменьшить головную боль тех. поддержки, чтобы получить премию и выплатить по кредиту.
Записан
spigel
Гость
Re: поиск по QRegExp
«
Ответ #6 :
Сентябрь 17, 2007, 11:10 »
Цитата: Tonal от Сентябрь 17, 2007, 10:17
Если тебе надо найти в тексте именно "{A:48:3}" то почему тебе не использовать просто поиск подстроки?
Зачем тебе нужны регулярные выражения?
отделить мою последовательность от других, указав специально что где должны быть разделители слов (границы)
Исследовав работу QRegExp я выяснил что для моего случая система выполняет как раз goodStringMatch который напрямую выполняет QString::indexOf и именно из-за этого находит попадание в случае aaa{A:48:3}k, совершенно игнорируя при этом
Записан
Tonal
Гость
Re: поиск по QRegExp
«
Ответ #7 :
Сентябрь 17, 2007, 13:25 »
Цитата: spigel от Сентябрь 17, 2007, 10:51
чтобы решить задачу, уменьшить головную боль тех. поддержки, чтобы получить премию и выплатить по кредиту.
Класс!
Так всегда и отвечай! Тогда все сразу просекут твою задачу, и выдадут горы полезных советов!
Полезный совет №1 - переходи работать постановщиком - им платят больше денег.
По существу.
Чтобы нормально объяснить, что тебе надо ответь на вопросы ниже:
1) Какие строки бывают на входе (приведи 3 - 4 штуки)
2) Какие места
нужно
находить в этих строках (выдели в приведённых строках эти места жирным шрифтом)
3) Какие места
не нужно
находить в этих строках (выдели в приведённых строках эти места красным шрифтом)
Записан
spigel
Гость
Re: поиск по QRegExp
«
Ответ #8 :
Сентябрь 17, 2007, 13:37 »
еще раз по технике и существу
необходимо, обязательно, составить pattern (шаблон) для поиска последовательности например {A:3} или [djfhj] или ,dfdjfh.
с разделением по словам!
что уж тут непонятного?
про word-characters: символы не слова критичны только около границы, если они отделены от нее word-letter то все работает как ожидается
пример шаблона: aa|\b\{Ad\{5\}\}\b
который должен найти любое попадание aa или отдельной последовательности {Ad{5}}
Записан
alexis
Гость
Re: поиск по QRegExp
«
Ответ #9 :
Сентябрь 17, 2007, 14:00 »
Может не к месту, но обратите внимание на вот это:
Код:
s1 = QRegExp::escape("bingo"); // s1 == "bingo"
s2 = QRegExp::escape("f(x)"); // s2 == "f\\(x\\)"
то есть, я хочу сказать, что, возможно, вы неверно эскейпите строку для рег-экспа.
нужно это делать дважды или использовать выше описанную функцию.
Записан
Tonal
Гость
Re: поиск по QRegExp
«
Ответ #10 :
Сентябрь 17, 2007, 14:24 »
Цитата: spigel от Сентябрь 17, 2007, 13:37
необходимо, обязательно, составить pattern (шаблон) для поиска последовательности например {A:3} или [djfhj] или ,dfdjfh.
с разделением по словам!
Что такое "слово" в твоём понимании?
Что ты подразумеваешь под "составить pattern ... с разделением по словам"?
P.S. Зайди на intuit.ru и зпришись на курсы по регулярныv выражениям - узнаешь много интересного. ;-)
Записан
spigel
Гость
Re: поиск по QRegExp
«
Ответ #11 :
Сентябрь 17, 2007, 15:08 »
alexis: да, спасибо! интересно узнать новые возможности библиотеки!
строка эскейпится верно, но для этого лучше всего использовать готовую библиотечную функцию!
спасибо, тов. Tonal за твердую линию партии. конечно надо разобраться кто тут еще достойный остался?
задачка почти решена, переводом non-word символов в словные.
ждем рекомендации и комментариев из Trolltech
Записан
spigel
Гость
Re: поиск по QRegExp
«
Ответ #12 :
Сентябрь 17, 2007, 15:32 »
Цитата: Tonal от Сентябрь 17, 2007, 13:25
1) Какие строки бывают на входе (приведи 3 - 4 штуки)
2) Какие места
нужно
находить в этих строках (выдели в приведённых строках эти места жирным шрифтом)
3) Какие места
не нужно
находить в этих строках (выдели в приведённых строках эти места красным шрифтом)
1) на входе, любая последовательность символов, например:
a.
{A:2}
b. avacado
c. man'sand womens' eat abuz ev day: {A:2:3} +
{a:2}
d: ..?d{A:2}
e: and
{A:2}
2) если запрос для поиска "{A:2}", то ищем точную последовательность {A:2}, как отдельное слово, из приведенных выше примеров.
совпадения для строки a), e), c)
3) не нужно находить d)
4) если в запросе убрали "" то ищем просто попадание последовательности символов без словных границ
т.е. в результате true для a), c), d), e)
слово это последовательность символов заключенная между \b\b или " ".
Записан
Tonal
Гость
Re: поиск по QRegExp
«
Ответ #13 :
Сентябрь 17, 2007, 16:53 »
для 2 и 3
\B\{A:2\}\B
для 4 - обычный indexOf
Твоё понимание "слова" не имеет никакого отношения к регулярным выражениям.
Читай первоисточники! ;-)
Записан
spigel
Гость
Re: поиск по QRegExp
«
Ответ #14 :
Сентябрь 17, 2007, 17:12 »
жаль, что твое понимание задачи и проблемы свелось к явной частности.
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...