私はVisualStudio2010を使用して、PCREを介して正規表現のマッチングを行っています。std::wstring
次のように指定されたパターンと件名があるとしましょう。
std::wstring subject = L"サービス内容";
std::wstring pattern = L"ス内";
pcre16_exec
ご覧のとおり、日本語の文字列を見つけようとするため、pcre16やpcre32pcre32_exec
などの関数を含む Unicode 版の PCRE を使用する必要があります。
残念ながら、うまくいきません。私の問題は、wstring
unsigned short または unsigned int への変換のようです (pcre16 または pcre32 に依存)。多くの関数 (wcstombs_s、QString を使用した文字列変換など) を試しましたが、成功しませんでした。exec 関数の結果は、私が期待する正しい値を決して保持しません。何がうまくいかなかったのかよくわかりません - 単純な pcre 関数を使用した ansi 文字列とのパターン マッチングは正常に機能します。ここにスニペットがあります:
pcre16 *re;
const char *error;
int erroffset;
int ovector[30]; //The reult of the matching
int subject_length;
int rc;
std::wstring subjectstr = L"サービス内容";
std::wstring patternstr = L"ス内";
subject_length = 6;
const unsigned short pattern = ....// string conversion from patternstr
const insigned short subject = ....// string conversion from subjectstr
re = pcre16_compile(&pattern, PCRE_UTF16, &error, &erroffset, NULL);
rc = pcre16_exec(re, NULL, &subject, subject_length, 0, 0, ovector, 30);
PCRE を使用して Unicode パターンを検出する方法、または何が問題なのかを説明する方法について、誰かが私に実用的な例を教えてください。私は自分自身に憤慨します。