想我想匹配以下管道分隔字符串:C++:匹配與使用boost ::正則表達式
std::string re("a|*|c");
std::string x("a|b|c");
std::string y("a|c|d");
does_match(re, x); // want to return TRUE
does_match(re, y); // want to return FALSE
什麼是使用boost ::實現does_match()
的最佳方式正則表達式?
我想我可能會遇到轉義管道和星星的問題。請注意,我不關心實際匹配:我只是想要一個易於使用的界面來0123?告訴我,如果我有一場比賽。
特別是,我希望能夠在不必爲管道和星星使用大量逃逸的情況下工作。我不關心正則表達式的其他更普遍的用法 - 如果我可以使用管道分隔符和*作爲通配符,那就足夠了。
也許我應該在does_match中做一個轉換以使boost :: regex高興?或者,也許我的整個方法是不好的(就像我應該使用某種strsplit())?)。
好,'|'*是*特殊字符在任何形式的正則表達式語言,這樣你就不會得到解決逃了......你要知道,C++字符串字面量也需要轉義反斜槓,因此它'會像'「a \\\ | * \\\ | c」'。希望沒有,就像「我希望編寫一些沒有所有大括號和類的C++」。 –
@KerrekSB:一個額外\就夠了,星星不能孤單(這是一個修飾符)。所以正則表達式的C++字符串將是''a \\ |。* \\ | c「'。 –
@JoachimPileborg:謝謝,我的錯誤,的確如此! –