我如何定義一個C++相匹配的字符串或者11/ECMAScript的正則表達式兼容聲明:C++ 11正則表達式IfThenElse - 單一,封閉的括號匹配或不匹配的括號
包含一個單一的,封閉,一對包含長度大於0的字母數字字符串的圓括號 - 例如正則表達式
"\(\w+\)"
,它正確匹配"(abc_123)"
,並忽略不正確的"(abc_123"
,"abc_123)"
和"abc_123"
。但是,上述表達式不會忽略包含多個平衡/不平衡包圍的輸入字符串 - 我想從匹配的結果中排除"((abc_123)"
,"(abc_123))"
和"((abc_123))"
。或單個,字母詞,沒有任何不平衡的括號 - 例如像正則表達式語句
"\w+"
正確匹配"abc_123"
,但遺憾的是不正確地匹配"(abc_123"
,"abc_123)"
,"((abc_123)"
,"(abc_123))"
和"((abc_123))"
...
爲了清楚起見,對於每個上述的測試用例的需要匹配數是:
"abc_123"
=匹配,"(abc_123)"
=匹配,"(abc_123"
=不匹配,"abc_123)"
=不匹配,"((abc_123)"
=不匹配,"(abc_123))"
=不匹配,"((abc_123))"
=未匹配。
我一直在落實http://www.regular-expressions.info/conditional.html建議IfThenElse格式玩耍,但很遠還沒有得到...是否有某種方式來限制特定組[例如中出現的次數"(\(){0,1}"
匹配零個或一個左手圓括號],並將前一個組的重複次數傳遞給後一個組["num\1"
等於括號出現在"(\(){0,1}"
中的次數,然後我可以將它傳遞給相應的右括號組,"(\)){num\1}"
說...]
你確定這可以通過常規的語言來表示? – MrEricSir
您是否願意接受使用Boost.Regex而不是C++ 11正則表達式的解決方案?我認爲如果你使用否定的後置斷言可以做到這一點,但這些不被C++支持。11正則表達式 – harmic
它只需要大約四行代碼直接檢查這個匹配。爲什麼使用正則表達式使其複雜化? –