2013-07-06 79 views
0

我有以下字符串,我與正則表達式C++ 11的問題

Ihwgiuwgdv {str{anything incl symb} chr{anything inc. symb} } blah blah 

工作使用regex_search和regex_match我找的字符串從第一支撐開始到結束的括號。

我已經試過

regex("\{[ ]*(str|chr)[ ]*\{(.)*\}[ ]*(str|chr)[ ]*\{(.)*\}[ ]*\}"); 

注:字符和STR可以互換位置,但在同一時間不能同時。可以有儘可能多的空間。無法使用boost我正在使用C++ 11。此正則表達式(除()。*)的工作原理與我們,但不能得到整個事情的C++

+2

你使用'std :: regex'嗎?如果是這樣,你使用'libstdC++'這是'g ++'附帶的標準庫嗎?如果是這樣,那麼你不能做正則表達式,它沒有實現。 – OmnipotentEntity

+0

是的,我使用它與g ++,但在我閱讀你的評論後,我嘗試在VC++ 2012上沒有成功。 OH注意,我用\\ {和{替換了\ {但沒有運氣! – abumusamq

+0

難道你不能讓某些特定的東西或其他方式把最後的大括號放在字符串/行的末尾嗎? – Tony

回答

0

工作,因爲regular expressions were designed to match regular grammars.這不是嚴格意義上講正規文法。用正則表達式做簡單的事情是不可能的。你可以使它工作,但只能費力地指定完整的可能性(str和chr的版本,反之亦然)。或者使用快捷鍵來確保字符串中存在\bstr\b\bchr\b,並且希望內部大括號內的任何內容不會引發誤報。

或者你可以爲此寫一個解析器。我會建議。這看起來很像JSON,你可以簡單地重寫一個現有的JSON解析器,它們並不複雜。

+0

我喜歡JSON並且以前使用過json-cpp,但是我不能使用json,因爲這是我想要解析的唯一的東西,我不想爲此導入整個庫。我最終寫了我自己的小解析器 – abumusamq