我是一名經驗豐富的C++開發人員,但對STL相對較新。我以前的任何項目都沒有使用過STL。我嘗試使用正則表達式來解析Windows服務文件(Windows\System32\drivers\etc\services
),並且我的表達式在Notepad ++中正常工作(在刪除爲C字符串文字添加的加倍反斜槓之後),但是我的STL代碼無法匹配相同的表達式,文本。我已經調試過它,並且我能說的最好,我認爲它匹配[e-Za-z]的「e」,然後未能匹配「c」到[^] *可能是因爲它沒有看到範圍爲否定。我通過STL正則表達式代碼中的_N_if
節點,然後_N_rep
節點因爲(在調用堆棧中嵌套了更深層次的幾個級別)而失敗,它正在處理_N_class
節點。 _Node=>_Flags
值爲_Fl_final
(4),其中不包含_Fl_negate
(1)標誌。STL regex_match無法匹配^。*
在這裏,我想,是我想調試的基本代碼:
std::basic_regex<TCHAR> re(_T("^([A-Za-z][^ ]*)\\s+(\\d{1,5})\\/(tcp|udp)\\b.*"), std::regex_constants::ECMAScript);
//...
std::match_results<const TCHAR*> mr;
if (std::regex_match(szLine, mr, re))
相信szLine的內容是
echo 7/tcp
它看起來像「E」被匹配,如果我的調試技巧很好,那麼「c」就會失敗。
我使用Visual Studio 2013年
編輯: szLine以換行符結束。我想知道這是否會導致比賽失敗,因爲.
默認不符合換行符?
什麼編譯器/版本您使用的? – NathanOliver
Visual Studio 2013,只是通過編輯添加到問題中。 – BlueMonkMN
我運行了你提供的示例,沒有使用新行,但在將新行添加到'szLine'後,它沒有。我在正則表達式中添加了'\\ n?',現在它在兩種情況下都能正常工作。 – AKJ88