2016-08-21 11 views
-5

Yunqa DiRegExprの(?i)トークンは、大文字小文字を区別しないようにするために使用されますが、キリル文字を使用する場合は機能しません。たとえば:Yunqa DiRegExpr - キリル文字の大文字と小文字を区別しない一致

\P{Cyrillic}(?i)ново 

は大文字Новоと一致する必要がありますが、それはしません。この仕事をする方法はありますか?私のコードを使用しています

enter image description here

::私たちが見るDiRegEx Workbenchアプリケーションを使用して

if ContainsText(MatchPattern, '(?i)') or 
    ContainsText(MatchPattern, '(?is)') or 
    ContainsText(MatchPattern, '(?si)') then 
     rexp.CompileOptions := [coCaseLess]; 
+2

これは、英語でのStackOverflow - >を参照します。http:/ –

+1

あなたが使用しているデルファイのバージョンと 'DiRegExpr'のバージョンを知ることは重要です。問題を示す完全なコードを表示することも重要です。これはおそらくAnsiとUnicodeでエンコードされた文字列の間の混乱です。しかし、使用しているコードを見ることなく、支援を提供することは困難です。参照してください:[mcve](または:[нарусском](http://ru.stackoverflow.com/help/mcve)) –

+0

@J ...:彼または彼女は英語で、右か? –

答えて

0

あなたは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('ново'); 
関連する問題