我有一個字符串,可以是「/」「+」「。」或描述性的名稱使用Boost :: Xpressive匹配單個字符
我試圖找出如何使用正則表達式來檢查,如果字符串匹配任何上述3個特殊字符(/ +或)
做的閱讀了一下後,我決定boost :: xpressive是要走的路,但我仍然無法弄清楚。
是Boost:xpressive適合這個任務,我的正則表達式字符串需要什麼?
感謝
我有一個字符串,可以是「/」「+」「。」或描述性的名稱使用Boost :: Xpressive匹配單個字符
我試圖找出如何使用正則表達式來檢查,如果字符串匹配任何上述3個特殊字符(/ +或)
做的閱讀了一下後,我決定boost :: xpressive是要走的路,但我仍然無法弄清楚。
是Boost:xpressive適合這個任務,我的正則表達式字符串需要什麼?
感謝
爲什麼不直接使用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原生元素。
我會說,Boost.Xpressive可能是矯枉過正的任務,但它是你的呼叫。
正則表達式是您希望驗證特別格式化的字符串時的救星。這裏沒有涉及的格式,只有一組可能的值。我的建議:如果你的問題可以通過簡單的連續字符串等於比較解決,比你可能不需要任何東西像正則表達式。
我想了解正則表達式,我無法找到上述問題的解決方案。我認爲這是旁邊的逃脫角色令我困惑。 – hipyhop 2010-12-10 15:25:08
@TomFLuff:那麼,那是不同的。正則表達式是非常強大的工具,因此請繼續深入研究。請記住,不要過於複雜地使用一些酷的解決方案(我不斷提醒自己這一點)。 – gregg 2010-12-10 16:08:07