와 I는 다음과 같이 여러 행 텍스트 기록을 분석하고하지 : C + +0 정규식은 그 소리와 함께 작동하지만 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
을 던졌습니다. 여기에 최소 (비) - 작업 예이다 : 나는
https://myregextester.com 모든 정규식 문자열을 테스트
#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;
}
, 그들은 잘 작동합니다. 또한, clang으로 MacOS에서 컴파일 된 코드는 문제없이 많은 실제 사례 데이터를 구문 분석합니다. 하지만 이제 리눅스/gcc 시스템에서 코드를 실행해야합니다.
내가 본 것에서 볼 때, gcc 4.9조차도 여전히 정규식으로 인해 버그가 있습니다. 아마, 당신은 아직 새로운 버전을 얻을 필요가있다. –