2012-02-03 8 views
3

MonoのRegex実装には正規表現の文字クラス減算が正しく処理されないというバグがあります。正規表現の文字クラス減算のリファクタリングについての助言

IE: "[ab- [a]]"は実際には文字セット "[b]"である必要があります。

たとえば、.NETの次のコードは "The \ ncat \ nsat \ non \ nthe \ nmat"を出力します。
この例では、モノで作業しようとしている単純化された正規表現が含まれています。

string listOfUnicodeChars = "\u2e80"; 
string patten = 
"[\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lo}‌‍\\p{Mn}\\p{Mc}\\p{Lm}-[" + listofUnicodeChars +"]]+"; 

Regex regex = new Regex(pattern); 
foreach (var match in regex.Matches("The cat sat on the mat.")) 
    Console.WriteLine(match); 

ただし、モノを使用すると、正規表現は何も一致しません。

誰かが正規表現で同じような影響を受ける方法に関する提案がありますか?

+0

パターンにパレンがありませんか? – krlmlr

+0

が更新されました。 – Tom

答えて

4

negative lookaheadを使用したことがありますか?例:

"(?![" + listOfUnicodeChars + "])[\\p{Lu}" + ... + "]" 
+0

例とリンクをありがとう。ネガティブな先読みはモノでうまくいくようです。 – Tom

+1

+1。だから正規表現は ''(?:(?! EXCLUDE)INCLUDE)+ "'となります。ここで、INCLUDEとEXCLUDEはあなたの2つの文字クラスです。 –

+0

右。私の例は1文字のみと一致します。 – krlmlr

関連する問題