Я новичок в Regex, и моя проблема всегда заключается в том, что мое регулярное выражение работает во всех онлайн-тестировщиках Regex, но никогда в визуальной студии.
Вот мое Regex:
"void TestSerializableClass\\:\\:TestSerializableClassPreSerializationCallback\\(\\)\\s"
"{\\s+USER_CODE_REGION\\(TestSerializableClass_PreSerializationCallback\\)\\s+"
"//Write the PreSerialization code here\\s+USER_CODE_ENDREGION"
"\\(TestSerializableClass_PreSerializationCallback\\)\\s+}";
Я хочу, чтобы он нашел это:
void TestSerializableClass::TestSerializableClassPreSerializationCallback()
{
USER_CODE_REGION(TestSerializableClass_PreSerializationCallback)
//Write the PreSerialization code here
USER_CODE_ENDREGION(TestSerializableClass_PreSerializationCallback)
}
Я получаю эту ошибку:
Invalid content of repeat range. The error occurred while parsing the regular expression fragment: 'ack\(\)\s{>>>HERE>>>\s+USER_CO'.
Это регулярное выражение, которое работало до того, как я попытался перенести его в визуальную студию:
void TestSerializableClass::TestSerializableClassPreSerializationCallback\(\)\s{\s+USER_CODE_REGION\(TestSerializableClass_PreSerializationCallback\)\s+//Write the PreSerialization code here\s+USER_CODE_ENDREGION\(TestSerializableClass_PreSerializationCallback\)\s+}
Boost (и c++ 11) имеют проблемы с отдельными операторами диапазона буквенного квантора {}
.
Так что все, что вам нужно сделать, это избежать их.
Я сделал это несколькими нажатиями кнопки с помощью RegexFormat 5.
Он имеет встроенный тестер регулярного выражения, который является бесплатным, если вы хотите отформатировать, вам нужно получить ключ.
Парсы, строки c++, форматирование/сжатие/комментарии regex и тесты тоже.
Удобный инструмент, это путь, если вы занимаетесь разработкой регулярных выражений для c++.
"(?x) \n"
" void\\ TestSerializableClass\\:\\:TestSerializableClassPreSerializationCallback\\(\\) \\s \n"
" \\{ \\s+ \n"
" USER_CODE_REGION\\(TestSerializableClass_PreSerializationCallback\\) \\s+ \n"
" //Write\\ the\\ PreSerialization\\ code\\ here \\s+ \n"
" USER_CODE_ENDREGION\\(TestSerializableClass_PreSerializationCallback\\) \\s+ \n"
" \\} \n"
Вывод:
** Grp 0 - ( pos 0 , len 263 )
void TestSerializableClass::TestSerializableClassPreSerializationCallback()
{
USER_CODE_REGION(TestSerializableClass_PreSerializationCallback)
//Write the PreSerialization code here
USER_CODE_ENDREGION(TestSerializableClass_PreSerializationCallback)
}