C ++ Простое использование регулярных выражений - PullRequest
0 голосов
/ 03 декабря 2011

Я просто пытаюсь бездельничать и знакомиться с использованием регулярных выражений в с ++. Допустим, я хочу, чтобы пользователь ввел следующее: ### - $$ - ###, сделайте # = любое число от 0 до 9 и $ = любое число от 0 до 5. Это моя идея для достижения этой цели:

regex rx("[0-9][0-9][0-9]""\\-""[0-5][0-5]")

Это не точный код, однако это общая идея, чтобы проверить, является ли ввод пользователя допустимой строкой чисел. Однако, допустим, я не позволю числам, начинающимся с 0, поэтому: 099-55-999 не приемлемо. Как я могу проверить что-то подобное и вывести неверный? Спасибо

Ответы [ 3 ]

4 голосов
/ 03 декабря 2011
[0-9]{3}-[0-5]{2}-[0-9]{3}

соответствует строке, которая начинается с трех цифр от 0 до 9, за которыми следует тире, за которыми следуют две цифры от 0 до 5, за которыми следует тире, а затем три цифры от 0 до 9.

Это то, что вы ищете?Это очень простой материал для регулярных выражений.Я предлагаю вам посмотреть хороший учебник .

РЕДАКТИРОВАТЬ: (после того, как вы изменили свой вопрос):

[1-9][0-9]{2}-[0-5]{2}-[0-9]{3}

будет соответствовать тому жекак указано выше, за исключением того, что в качестве первого символа нельзя указывать 0.

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

Попробуйте это:

#include <regex>
#include <iostream>
#include <string>

int main()
{
    std::tr1::regex rx("\\d{3}-[0-5]{2}-\\d{3}");
    std::string s;
    std::getline(std::cin,s);
    if(regex_match(s.begin(),s.end(),rx))
    {
        std::cout << "Matched!" << std::endl;
    }
}

Для объяснения проверьте @ Тим ответ. Do обратите внимание на двойной \ для метасимвола цифры.

1 голос
/ 03 декабря 2011
std::tr1::regex rx("[0-9]{3}-[0-5]{2}-[0-9]{3}");

Вы говорите об использовании tr1 regex в c ++, а не в управляемом c ++? Если это так, перейдите сюда , где это объясняется.

Кроме того, вы должны знать, что если вы используете VS2010, вам больше не нужна библиотека boost для регулярных выражений.

...