Russian Qt Forum
Май 03, 2024, 16:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Аналог QRegExp  (Прочитано 11785 раз)
Zmey
Гость
« : Январь 10, 2005, 17:26 »

QRegExp::exactMatch сильно медленно... Может кто-нибудь знает простенький класс, без всяких поддержек Перловских регулярных выражений, просто чтобы сравнивать строки с шаблоном с использованием * и ?   :?:
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Январь 11, 2005, 12:50 »

Я тоже этот RegExp терпеть не могу... Шняга редкостная... Мало того, что тормозит, так еще и работает через раз и тааак криво...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #2 : Январь 11, 2005, 13:23 »

так писали бы багрепорты тролтехам
то что не работает

у нх хороший подход все в одном


тебе что то понадобилось, глядишь а это уже есть
и ничего стороннего брать не надо Улыбающийся
Записан
Zmey
Гость
« Ответ #3 : Январь 11, 2005, 14:10 »

Нашел таки, что мне было нужно:
Код:

int wildcmp( char *wild, char *string2 )
{
    char *cp, *mp;
        while ((*string2) && (*wild != '*'))
         {

            if ((*wild != *string2) && (*wild != '?')) {
            return 0;
        }

        wild++;
        string2++;
    }

while (*string2) {
            if (*wild == '*') {
                if (!*++wild) {
                return 1;
            }

            mp = wild;
            cp = string2+1;
            } else if ((*wild == *string2) || (*wild == '?')) {

            wild++;
            string2++;
            } else {

            wild = mp;
            string2 = cp++;
        }

    }

while (*wild == '*') {
        wild++;
    }

return !*wild;
}
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #4 : Январь 11, 2005, 15:25 »

да на такие сишные конструкции страшно смотреть Улыбающийся
Записан
pish_r
Гость
« Ответ #5 : Январь 15, 2005, 21:25 »

Вопервых, регулярные выражения по определению не могут быть очень быстры.
Вовторых, юзал QRegExp на простеньких примерах, то глюков и особых тормозов не видал.
Для серьезного парсинга юзал boost::regexp,  попробуйте.
А приведенный код доверия не внушает.
Записан
Zmey
Гость
« Ответ #6 : Январь 17, 2005, 09:40 »

Цитата: "pish_r"
...
А приведенный код доверия не внушает.


Какие именно операторы не внушают тебе доверия?..
Записан
Anonymous
Гость
« Ответ #7 : Январь 17, 2005, 12:00 »

Цитата: "Zmey"
Цитата: "pish_r"
...
А приведенный код доверия не внушает.


Какие именно операторы не внушают тебе доверия?..


Ну не надо так. Не ты один С/С++ знаешь.
Этот код к регулярным выражениям имеет только то отношение, что делает поиск по
знакам, используемым регулярными выражениями.
А про машину Тьюринга никогда не слыхал?
И не думал почему при реализации Регекспов ее используют?
Если подобным этому коду реализовать полностью регекспы, то тормозить будет в разы больше, чем в QRegExp
Записан
Zmey
Гость
« Ответ #8 : Январь 17, 2005, 13:50 »

Да мне до одного места все РегЭкспы, мне был нужен код для сравнения строки и шаблона, заданного с символами * и ?, и справляется он с этим прекрасно, что в нем не внушает тебе доверия я так и не понял.
Записан
pablo
Гость
« Ответ #9 : Январь 17, 2005, 14:24 »

На мой взгляд конструкция то может и ничего, только выглядет уж больно сложновато.
Для сравнения строк и вообще для операций с символами язык Си предлогает слишком запутанные конструкции.
Гораздо всё проще выглядит на C++, хоть и производительность одинаковая или не сильно отличается.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 22.