Альтернативный способ использования регулярных выражений для Visual Studio 2003

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

Но Regex не существует в Visual Studio 2003.

Мой вопрос: как я могу проверить значение в Visual Studio 2003, не используя Regex и стороннюю библиотеку?

Мой исходный код:

#include "stdafx.h"#include <regex>
#include <string>
using namespace std;int main()
{
std::string code1 = "{1N851111-8M32-2234-B83K-123456789012}";
std::regex control("^[{]{8}[A-Za-z0-9]{1}[-]{4}[A-Za-z0-9]{1}[-]{4}[A-Za-z0-9]{1}[-]{4}[A-Za-z0-9]{1}[-]{12}[A-Za-z0-9]$[}]");
std::smatch match;

if (std::regex_search(code1, match, control))
{
std::cout << "MAtch found";

}

else
{
std::cout << "Match not found";
}

return 0;
}

0

Решение

Ну, если вы не хотите использовать сторонние библиотеки (почему, кстати?), Вам придется пройти весь путь пешком … (Звучит легко, не правда ли?)

На первый взгляд, ваше регулярное выражение не похоже на то, что вам нужно. Ты это пробовал? Этот, по крайней мере, соответствует вашему примеру строки:

std::regex control("^[{][A-Za-z0-9]{8}([-][A-Za-z0-9]{4}){3}[-][A-Za-z0-9]{12}[}]$");

Тогда давайте посмотрим на регулярное выражение (я собираюсь использовать мой …):

^ — хорошо, с самого начала, поэтому нам не нужно искать где-то в середине строки …
[{] — должна быть открывающая скобка
[A-Za-z0-9]{8} — следуют ровно восемь буквенно-цифровых символов
([-][A-Za-z0-9]{4}){3} — знак минус, за которым следуют буквенно-цифровые цифры — все это три раза
[-][A-Za-z0-9]{12} — еще один минус, за которым следуют двенадцать буквенно-цифровых символов
[}]$ — закрывающая скобка в конце

Так:

bool isValid(::std::string const& value)
{
if(value.length() != 38)
return false;
char const* v = value.c_str();
if(*v++ != '{')
return false;
for(char const* end = v + 8; v != end; ++v)
{
if(!isalnum(*v))
return false;
}
for(int i = 0; i < 3; ++i)
{
if(*v++ != '-')
return false;
for(char const* end = v + 4; v != end; ++v)
{
if(!isalnum(*v))
return false;
}
}
if(*v++ != '-')
return false;
for(char const* end = v + 12; v != end; ++v)
{
if(!isalnum(*v))
return false;
}
return *v == '}';
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]