Тебе нужно убежать от обратной косой черты.Измените
char * regex = "<sql\s+db=(.+)\s+query=(.+;)\s*\\>";
на
char * regex = "<sql\\s+db=(.+)\\s+query=(.+;)\\s*\\\\>";
Обратите внимание, что это крайне неэффективно.Гораздо более эффективное регулярное выражение использует не жадное количественное выражение, с ?
:
<sql\s+db=(.+?)\s+query=(.+;)\s*\\>
// ^ key change
, которое становится:
char * regex = "<sql\\s+db=(.+?)\\s+query=(.+;)\\s*\\\\>";
Также обратите внимание: ваша строка для сопоставления также включает \
,Вам тоже нужно убежать от него:
char * str = "<sql db=../serverTcp/Testing.db query=SELECT * From BuyMarsians;\\>";
Вот рабочая демонстрация вашего исправленного кода .