Я работаю над второстепенным побочным проектом на F#, который включает перенос существующего кода C# на F#, и я, похоже, столкнулся с разницей в том, как обрабатываются регулярные выражения между двумя языками (я публикую это, чтобы, надеюсь, узнать, что я просто сделал что-то не так).
Эта второстепенная функция просто обнаруживает суррогатные пары, используя трюк с регулярными выражениями, описанный здесь. Вот текущая реализация:
let isSurrogatePair input =
Regex.IsMatch(input, "[\uD800-\uDBFF][\uDC00-\uDFFF]")
Если я затем выполню его против известной суррогатной пары, например:
let result = isSurrogatePair "????野????"
printfn "%b" result
Я получаю false
в окне FSI.
Если я использую эквивалент С#:
public bool IsSurrogatePair(string input)
{
return Regex.IsMatch(input, "[\uD800-\uDBFF][\uDC00-\uDFFF]");
}
И то же входное значение, я (правильно) получаю true
обратно.
Это реальная проблема? Я просто делаю что-то неправильно в своей реализации F#?