Что должен вернуть QString :: contains (QRegExp)?Могу ли я использовать метасимволы позиции в RegExp? - PullRequest
0 голосов
/ 17 декабря 2011

Я пытаюсь определить, является ли мой ввод URL-адресом или простым путем к файлу. Я просто проверяю http: // или www внутри строки, и мне этого достаточно.

Итак, я пытаюсь QString :: Содержит (QRegExp), и я обнаружил, что он не возвращает то, что я ожидаю. Я сделал фрагмент, чтобы доказать, что это фальшивка:

#include <QtCore>
#include <iostream>

int main(int argc, char *argv[]){
        std::cout << "true: " << true << std::endl;
        std::cout << "false: " << false << std::endl;
        if (argc > 1)
                std::cout << "input: " << (QString(argv[1]).contains(QRegExp("^[(http://)(www)]"))) << std::endl;
        return 0;
}

Он должен вывести 0, если первый параметр не начинается с www или http://, или 1, если это так. Но это мои результаты:

$ ./test
true: 1
false: 0
$ ./test foobar
true: 1
false: 0
input: 0
$ ./test www.google.com
true: 1
false: 0
input: 0x7fffa68f72df
$ ./test ww_foobar.com
true: 1
false: 0
input: 0x7fff177ba65f

Кто-нибудь знает, что происходит?

1 Ответ

1 голос
/ 17 декабря 2011

Вы уверены, что делаете то, что хотите?

^[(http://)(www)]

Средства:

Соответствует началу строки, за которой следует один из (htp:/)w

Что вы, вероятно, хотели написать:

std::cout << "input: " << (QString(argv[1]).contains(QRegExp("^(?:http://|www)"))) << std::endl;
        return 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...