私は、既存の C# コードを F# に移植することを含む F# のマイナーなサイド プロジェクトに取り組んでおり、2 つの言語間で正規表現がどのように処理されるかの違いに出くわしたようです (うまくいけば、私が間違ったことをしているだけです)。
このマイナーな機能は、ここで概説されている正規表現のトリックを使用してサロゲート ペアを検出するだけです。現在の実装は次のとおりです。
let isSurrogatePair input =
Regex.IsMatch(input, "[\uD800-\uDBFF][\uDC00-\uDFFF]")
次に、次のような既知のサロゲートペアに対して実行すると:
let result = isSurrogatePair "野"
printfn "%b" result
false
FSI ウィンドウに入ります。
同等の C# を使用する場合:
public bool IsSurrogatePair(string input)
{
return Regex.IsMatch(input, "[\uD800-\uDBFF][\uDC00-\uDFFF]");
}
そして、同じ入力値、私は(正しく)true
戻ってきます。
これは本当の問題ですか?F# の実装で何か間違ったことをしているだけですか?