2012-08-13 33 views
0

我正在C++上工作,我從xml文件中獲取正則表達式。我必須以長字符串搜索這個正則表達式。 例如我的正則表達式是:".+myFunction"如何忽略boost :: regex_search()函數中的反斜槓字符?

所以,如果我必須把XML文件正則表達式的話,我需要在上述正則expresssion使用backslach字符'\''.'之前。 即"\.+myFunction"

現在我使用boost::regex_search()函數來搜索上面的正則表達式。但由於額外的反斜槓字符,函數返回false。

那麼如何在使用boost::regex_search()函數時忽略backlalach字符?

示例代碼如下:

string longString = "hdh::dfjdj::dfuhgj::myFunction.devide.and" 
string regularExp = "\.+myFunction" 
const boost::regex searchPattern(regularExp); 
if(boost::regex_search(longString, searchPattern)) 
{ 
    cout <<"Regular expresssion is found" << std::endl; 
} 
+0

我認爲還有其他原因,'.'前面的單個反斜槓是沒有操作的。編譯器應該告訴過你。 – 2012-08-13 13:32:17

+0

當您從XML讀取而不是修改正則表達式代碼時,應該刪除反斜槓。 – Lyth 2012-08-13 13:32:34

+0

也許我們誤解了一些東西......爲什麼你需要在點之前使用反斜槓,如果你把它放到xml文件中? – 2012-08-13 13:34:09

回答

0

這不是真的太清楚你問: 「+ myFunction的」

  • 在XML中,'是完全合法的,因爲是。

  • 如果你想匹配的精確序列,你需要逃跑 反斜線兩次:第一次是因爲它具有特殊的含義在 字符串文字,和第二次,因爲它有特殊的意義爲 正則表達式。如果您需要 ,那麼您還需要跳過引號:"\"\\\\.+myFunction\""。 但是,如果您嘗試匹配確切的序列,則不需要 正則表達式:std::search已足夠。

  • 如果你正在試圖確定它匹配的不是一個換行符以外的一個或多個字符的序列 正則表達式,然後 序列"myFunction",字符串文字來初始化 正則表達式是".+myFunction"