我解析看起來像下方的多行文字記錄:的C++ 0x的正則表達式的作品鏗鏘而不是用gcc 4.9.2
> UniRef50_A0A091LJV8 Lysozyme g (Fragment) n=2 Tax=Chlamydotis
macqueenii RepID=A0A091LJV8_9GRUI
Length=186
Score = 114 bits (285), Expect = 3e-30, Method: Compositional matrix adjust.
Identities = 54/83 (65%), Positives = 65/83 (78%), Gaps = 0/83 (0%)
Query 1 ASCKTAKPEGLSYCGVSASKKIAERDLQAMDRYKTIIKKVGEKLCVEPAVIAGIISRESH 60
AS TA+PEGLSY GVSAS+KIAE+DL+ M +++ I +V V+PA+IAGIISRESH
Sbjct 17 ASEATARPEGLSYAGVSASEKIAEKDLKNMQKHQDKITRVANSKGVDPALIAGIISRESH 76
Query 61 AGKVLKNGWGDRGNGFGLMQVDK 83
G VL+NGWGD N FGLMQVDK
Sbjct 77 GGTVLENGWGDHNNAFGLMQVDK 99
我用幾個正則表達式來從這些記錄中提取數據。當他們用clang(MacOS X)和gcc 4.9.2(Ubuntu)編譯時,它們都工作。然而,其中一個用gcc編譯時會拋出regex_error
。這裏是最小的(非) - 工作實例:
#include <regex>
const std::string regex_string_OK_1 = "\\[(.+?)\\]";
const std::string regex_string_OK_2 = "Tax\\s*?=\\s*?([\\n\\w ]*?)\\s*?RepID";
const std::string regex_string_PROBLEM = "Query\\s+?(\\d+?)\\s+?([_\\-[:alnum:]]+?)\\s+?(\\d+?)\\n.+?\\nSbjct\\s+?(\\d+?)\\s+?([_\\-[:alnum:]]+?)\\s+?(\\d+?)\\n";
int main(int argc, const char *argv[]) {
std::regex regex_OK_1(regex_string_OK_1);
std::regex regex_OK_2(regex_string_OK_2);
std::regex regex_PROBLEM(regex_string_PROBLEM); // This line throws regex_error on Ubuntu
return 0;
}
我測試了所有的正則表達式字符串https://myregextester.com,他們的工作就好了。此外,在MacOS上使用clang編譯的代碼可以解析大量實際案例數據,而不會出現任何問題。但現在我必須在Linux/gcc系統上運行代碼。
從我看到的所以,甚至gcc 4.9仍然是與正則表達式的越野車。也許,你需要得到一個更新的版本。 –