2010-12-10 70 views
0

我有一個字符串,可以是「/」「+」「。」或描述性的名稱使用Boost :: Xpressive匹配單個字符

我試圖找出如何使用正則表達式來檢查,如果字符串匹配任何上述3個特殊字符(/ +或)

做的閱讀了一下後,我決定boost :: xpressive是要走的路,但我仍然無法弄清楚。

是Boost:xpressive適合這個任務,我的正則表達式字符串需要什麼?

感謝

回答

2

爲什麼不直接使用std::string::find_first_of()做自己的解決方案?聽起來像很多機器來完成一項相當簡單的任務。

編輯

如果你還停留嘗試了這一點。

#include <iostream> 
#include <boost/xpressive/xpressive.hpp> 

using namespace std; 
using namespace boost::xpressive; 

int main() 
{ 
    sregex re = sregex::compile("[+./]|[:word:]+"); 

    sregex op = as_xpr('+') | '.' | '/'; 
    sregex rex = op | (+alpha); 

    if (regex_match(string("word"), re)) 
     cout << "word" << endl; 
    if (regex_match(string("word2"), re)) 
     cout << "word2" << endl; 
    if (regex_match(string("+"), re)) 
     cout << "+" << endl; 
    return 0; 
} 

有兩種方法可以做同樣的事情。名爲re的變量是用類似perl的正則表達式字符串初始化的。 rex使用Xpressive原生元素。

+0

我想了解正則表達式,我無法找到上述問題的解決方案。我認爲這是旁邊的逃脫角色令我困惑。 – hipyhop 2010-12-10 15:25:08

+1

@TomFLuff:那麼,那是不同的。正則表達式是非常強大的工具,因此請繼續深入研究。請記住,不要過於複雜地使用一些酷的解決方案(我不斷提醒自己這一點)。 – gregg 2010-12-10 16:08:07

1

我會說,Boost.Xpressive可能是矯枉過正的任務,但它是你的呼叫。

正則表達式是您希望驗證特別格式化的字符串時的救星。這裏沒有涉及的格式,只有一組可能的值。我的建議:如果你的問題可以通過簡單的連續字符串等於比較解決,比你可能不需要任何東西像正則表達式。