2015-10-24 176 views
4

我使用的正則表達式有什麼問題?C++:爲什麼正則表達式模式「[+ -/*]」匹配字符串「。」?

#include<regex> 
#include<iostream> 
#include<string> 
using namespace std; 
int main(int argc,char *argv[]) 
{ 
    smatch results; 
    string temp("[+-/*]"); 
    string test("."); 

    regex r(temp); 

    if(regex_search(test,results,r)) 
     cout<<results.str()<<endl; 
    return 0; 
} 

「。」將被打印出來,如果我使用「\」像創建轉義序列:

string temp("[\\+-/\\*]"); 

輸出保持。

+0

從C++ 11中查看原始字符串 - 它們非常棒! – Downvoter

回答

8

問題在於-在字符類[]中的解釋不同,它覆蓋範圍內的字符。這是對-的解釋,它允許您將[A-Z]定義爲覆蓋所有大寫字母,或者將[0-9]定義爲涵蓋所有小數位數字。

如果你想使用-,將其放置在開頭或塊的末尾,或\逃避它:

string temp("[-+/*]"); 

否則,[+-/]涵蓋與'+'之間碼的所有字符(43)和'/'(47),包括端點,即'+',',','-','.''/'