2016-05-08 6 views
0

正規表現で値をチェックするサンプルプログラムを作成しました。この例では、Visual Studio上で、2012年Visual Studio 2003でregexを使用する別の方法

を実行している。しかし、正規表現は、Visual Studio上に存在しない2003

私の質問は:どのように私は正規表現を使用せずに、Visual Studioの2003に値を確認することができますし、サードパーティのライブラリですか?

私のソースコード:(?道で、なぜ、)まあ

#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'はC++ 11以降登場したので、VC2003には欠けていることが予想されます。 – user3159253

+0

正規表現でどのように値を制御できますか? – ForceBru

+3

また、[PCRE](http://www.airesoft.co.uk/pcre)のようなサードパーティライブラリを使用してタスクを解決することもできます。詳細を見るには[このブログの投稿](https://hiddencodes.wordpress.com/2015/02/18/build-and-use-pcre-in-windows/)をチェックしてください。 – user3159253

答えて

2

、サードパーティのライブラリを使用しない場合、あなたは徒歩ですべての道を行く必要があります...(音は簡単ですね。)

非常に最初は、あなたの正規表現はあなたの後ろではないようです。あなたはそれを試しましたか?右から、

^ –罰金:次に

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

のは、正規表現を見てみましょう(私は私を使用するつもりです...):この1は、少なくとも、あなたの例の文字列にマッチします [{]
が正確に8文字の英数字
続くオープニングブレース
[A-Za-z0-9]{8} –でなければならない...始めるので、私たちは、文字列の途中でどこかに検索する必要はありません。 ([-][A-Za-z0-9]{4}){3} –マイナス記号は、英数字–全体のもののために続いて3回
[-][A-Za-z0-9]{12} – telveの英数字が続く別のマイナス

だから、最後に括弧を閉じる
[}]$ –:

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 == '}'; 
} 
+0

代替ソリューションをありがとう。私は値をチェックする正規表現で育った。 :) – Skydreampower

関連する問題