Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 47
1

QRegExp фильтрация кода. Не правильно работает выражение(не так как я ожидаю)

30.04.2015, 02:29. Показов 536. Ответов 1
Метки нет (Все метки)

Здравствуйте. Пишу парсер Си кода.
Для парса использую регулярные выражения и паттерны.

Предположим код уже предварительно разбит построково, отформатирован и забит в QStringList.
Задача: найти среди строк в листе соответствующую точке входа (main), без оглядки на тип, параметры итд.

Я использую регулярное выражение "[a-zA-Z]*\smain[\s]*\([\S\s]*\)$" (конечно же, бэкслэши удвоены в коде, чтобы QString не пыталась обрабатывать);

Входные данные:
C++ (Qt)
1
2
3
4
QStringList code = { \
                        "void func1();"\
                        "void func2();"\
                        "void main(void)"};
Код:
C++ (Qt)
1
2
3
4
5
6
for(int i = 0; i<code.length(); i++){ //нахождение итератора на строке main()
        if(main_rx.exactMatch(code[i])){
            mainLine = i;
            break;
        }
    }
Загвоздка, собственно, в том, что регулярное выражение работает, но слишком хорошо
И что при "void main(void)" что при "void main(void);" срабатывает exactMatch.
Само собой, такая ошибка неприемлема, т.к объявление функции != описание функции.

Подскажите пожалуйста где кроется ошибка и почему $ не обозначает конец строки?

Добавлено через 12 минут
Упс, про итераторы комментарий не в тему. Код переписал, а комментарий забыл х)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2015, 02:29
Ответы с готовыми решениями:

Что в коде ни так? while не работает так, как ожидаю
Написанный код, как я думаю, должен выдавать цифры от 0 до 1000, столбиком. Но выдает начиная от...

Регулярное выражение работает не так, как надо
Здравствуйте, имеем файл В нем есть строки типа var title_f38_16_39183=&quot;Sulcus sign&quot;; - то есть...

QRegExp выражение
В общем, имеем следующее: Шаблон выражения вида - &lt;\/?(\s|\S)*?&gt; Код, который это выражение...

Регулярное выражение QRegExp
Помогите составить регулярное выражение для демо-примера в Qt4 &quot;Custom Sort Filter Model&quot;, чтобы в...

1
4 / 4 / 2
Регистрация: 15.04.2013
Сообщений: 54
30.04.2015, 09:57 2
Qt 5.3.1 - все работает правильно, при "void main(void);" exactMatch не срабатывает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2015, 09:57

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Регулярное выражение (QRegExp)
Добрый день. Помогите пожалуйста правильно составить регулярное выражение, чтобы с html кода...

Как сделать так чтобы vb из файла доставал выражение вида ((2*3)+2)/2 как мат. выражение а не как набор символов?
а вопрос такой как сделать так чтобы vb из файла доставал выражение вида ((2*3)+2)/2 как мат....

Не работает правильно регулярное выражение
Есть такая регулярка. \b^{3,10}\b Она проверяет слово на то что может начитаться...

Не работает правильно рег.выражение
Мне нужно рег.выражение следующего формата: слово (от 1 до 6 символов) пробел число (от 1 до 3...

Не работает QRegExp
QRegExp RegExpFileName(&quot;+\x2E.+&quot;); RegExpFileName.indexIn(FileFullName); QString FileName =...

Не правильно работает не подскажите что не так?
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void Char(int n,int c ) {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.