Visual Studio Regex

0

Я новичок в 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+}
  • 0
    Вы пытаетесь сопоставить код C ++ с регулярным выражением ?! В любом случае, в качестве первого шага, значительно уменьшите размер функции, которую вы пытаетесь сопоставить. Мол, массово. Затем создайте его, пока он не потерпит неудачу. Тогда вы узнаете, что не получается. Отладка м8! :)
  • 0
    Да, это для тестового примера генератора кода. Чтобы убедиться, что он генерирует правильные функции.
Показать ещё 2 комментария
Теги:
boost

1 ответ

1
Лучший ответ

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)
}  

Ещё вопросы

Сообщество Overcoder
Наверх
Меню