pcre и win1251
От: PauloMaldini  
Дата: 19.03.08 08:38
Оценка:
Здравствуйте.
Использую в программе на С++( среда Visual Studio 2003 )библиотеку регулярных выражений PCRE в виде DLL. Проблема заключается в работе с выражениями на русском языке. Ниже приведен пример:

#include <tchar.h>
#include <string.h>
#include <locale.h>
#include <stdio.h>
#include "pcre.h"

int _tmain(int argc, _TCHAR* argv[])
{
    if( !setlocale( LC_ALL, "Russian_Russia.1251" ) )
    {
        printf( "Локаль не установлена" );
        return 0;
    } 
    const unsigned char* char_tables = pcre_maketables(); //pcre-загрузка текущей локали
    char* pattern = "(\\bслово\\b)"; //шаблон
    const char* errstr;
    int errchar;
    pcre* cmpld_pat = pcre_compile( //компилируем шаблон
                                     pattern,
                                     PCRE_CASELESS, 
                                     &errstr,
                                     &errchar, 
                                     char_tables 
                                  );
    
    char* str = "Честное слово"; //строка для поиска
    int vector[50];
    int vsize = 50;
    int pairs = pcre_exec( //выполняем поиск на соответствие
                           cmpld_pat,
                           NULL,
                           str, 
                           strlen( str ),
                           0,
                           PCRE_NOTEMPTY,
                           vector,
                           vsize 
                         );
    if( pairs < 0 )
        printf( "Соответствие не найдено" );
    else
        printf( "Соответствие найдено" );   
    
    return 0;
}


Функция setlocale отрабатывает нормально, локаль устанавливается. А вот соответствие не обнаруживается.
Если используется латинница, то все работает. Подскажите, пожалуйста, в чем может быть проблема?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.