2013-05-07 156 views
2

我想獲取文件之間的引號內容,我正在使用正則表達式。這是我使用正則表達式:正則表達式工作正則表達式測試儀,但不是在c + +

id=\"([^\"]+)\"|title=\"([^\"]+)\" 

正如你可以看到,每一個特殊字符轉義。它在正則表達式測試程序中很好地工作,但是在C++代碼中使用時找不到標題。身份證總是沒問題。我嘗試了好幾種變化,以及它甚至去掉一半(前|)

id="60973129" title="EPA" 

這是我使用的C++代碼:

std::regex rgx("id=\"([^\"]+)\"|title=\"([^\"]+)\""); 
std::smatch match; 

if (std::regex_search(line, match, rgx)) { 
    for (int i=0; i < match.size(); ++i) { 
      std::cout << match[i]; 
    } 
} 

編輯:我發現,如果單獨的放title=\"(.+?)\"確實有效,但之後我必須使用幾個正則表達式,這會破壞我的目的,因爲我需要稍後掃描更長的行。

+0

你可以顯示代碼實際使用的地方嗎? – JBL 2013-05-07 14:19:27

+0

用代碼編輯。 – 2013-05-07 14:22:29

+1

這不是問題,但可以通過使用非貪婪重複來簡化。代替'\「([^ \」] +)\「'try'\」(。+?)\「' – 2013-05-07 14:27:02

回答

1

它可能在測試程序中起作用,因爲它在字符串中表示「做任何匹配」,而不是「整個事物匹配」。

無論如何,| |是一個「或」,找到一個或另一個。要匹配顯示的字符串,請更改|可以是空格,也可以是任意數量空格的指示符,例如[\ t] +,我懷疑它會正常工作。

+0

我沒有得到任何結果既不是'id = \「([^ \」] +)\「title = \」( [^ \「] +)\」'也不''id = \「([^ \」] +)\「[\ t] + title = \」 – 2013-05-07 14:34:21

相關問題