あなたはUTF8を使用している場合は、あなたが[coUtf8]
(PCRE_UTF8
)を使用する必要があり、Unicode文字列をエンコードコンパイルオプション。この設定はこの設定で成功します。
すなわち:
rexp.CompileOptions := rexp.CompileOptions + [coUtf8];
コンソールでintalled Unicodeフォントを必要とするが、ここではこれを示すサンプルプログラムですよ結果を参照してください。
program Project1;
{$APPTYPE CONSOLE}
uses
Windows, DISystemCompat, DIUtils, DIRegEx;
var
RegEx: TDIRegEx16;
matched : string;
begin
SetConsoleOutputCP(CP_UTF8);
RegEx := TDIPerlRegEx16.Create(nil);
try
{ comment out line below to replicate problem }
RegEx.CompileOptions := [coUtf8];
RegEx.SetSubjectStr('Ново');
RegEx.CompileMatchPatternStr('(?i)ново');
if RegEx.Match(0) > 0 then
repeat
matched := RegEx.MatchedStr;
WriteLn('Matched: ', UTF8Encode(matched));
until RegEx.MatchNext < 0
else
WriteLn('No match.');
finally
RegEx.Free;
end;
ReadLn;
end.
あなたは(あなたが明示的に試合でそれを指定するため)のパターンで(?i)
含めることによって、あなたは、コンパイルオプションで[coCaseLess]
を含める必要はありませんのでご注意ます。
あなたが代わりにあなたがパターンから(?i)
を省略することができ、ちょうどまた働く、代わりにこれを行うコンパイルオプションを使用しない場合:
RegEx.CompileOptions := [coCaseLess, coUtf8];
RegEx.SetSubjectStr('Ново');
RegEx.CompileMatchPatternStr('ново');
これは、英語でのStackOverflow - >を参照します。http:/ –
あなたが使用しているデルファイのバージョンと 'DiRegExpr'のバージョンを知ることは重要です。問題を示す完全なコードを表示することも重要です。これはおそらくAnsiとUnicodeでエンコードされた文字列の間の混乱です。しかし、使用しているコードを見ることなく、支援を提供することは困難です。参照してください:[mcve](または:[нарусском](http://ru.stackoverflow.com/help/mcve)) –
@J ...:彼または彼女は英語で、右か? –