DotNet эквивалент Java Matcher.hitEnd()

Я пытаюсь настроить серию регулярных выражений для сопоставления неизвестных входящих данных.

Что я хочу сделать, так это определить, соответствует ли каждое выражение данным, не может ли они совпадать или может соответствовать данным на данный момент.

Например, если у нас есть следующие регулярные выражения:

  • \Aaaab
  • \Aaaac
  • \Abbb

Тогда, если мы уже получили aa, то первые два могут совпадать, в зависимости от того, что будет дальше, но третий никогда не совпадет.

Если мы получим еще немного и получим aaac, то первое не будет совпадать, второе совпадет, а третье все равно не совпадет.

В Java это можно сделать так:

Pattern pattern = Pattern.compile("\Aaaab");
Matcher matcher = pattern.matcher(receivedSoFar);
if (matcher.matches())
{
  // A match has been found now
}
else if (matcher.hitEnd())
{
  // Doesn't match yet, but don't write it off, wait for more data.
}
else
{
  // This pattern doesn't match at all, we can rule it out.
}

См. здесь рабочий пример.

Различие между «может соответствовать» и «не соответствует» важно, потому что, если мы достигнем точки, где ни один из шаблонов не может совпадать, нам нужно будет вызвать реакцию состояния ошибки.

Я искал способ реализовать это в C# DotNet и не смог его найти. Класс System.Text.RegularExpressions.Match имеет только свойство Success, которое сообщает нам, найдено ли совпадение, но не может сказать нам, возможно ли совпадение в будущем.

Есть ли способ сделать это в C# DotNet?

Я попробовал Google, документацию learn.microsoft.com и даже, в отчаянии,

Отредактировано: Извините, я случайно упомянул requireEnd, где имел в виду hitEnd.

🤔 А знаете ли вы, что...
C# (C Sharp) - это современный объектно-ориентированный язык программирования, разработанный Microsoft.


67
1

Ответ:

Решено

Посмотрите https://github.com/ltrzesniewski/pcre-net (Perl-совместимые регулярные выражения для .NET)

В файле readme есть раздел о частичном совпадении, он может охватывать ваш вариант использования.

Я не знаю хорошего способа решить это требование с помощью внутренней реализации Regex .Net, поэтому лучшим выбором может быть использование альтернативной реализации nuget.


Интересные вопросы для изучения

Мауи выдает FileNotFoundException только при ссылке на файл JSON из внешней сборкиПередача исходных общедоступных переменных в качестве параметров метода, которые необходимо постоянно проверятьСтраницы ASP.NET Core Razor — как установить культуру по умолчанию, отличную от en-US, для локализации запросовПочему контекст данных контекстного меню имеет значение null при первом открытии, но то, что ожидается при следующем открытии в WPF?WPF + CommunityToolkit.Mvvm, как реализовать команды отмены/повтораWPF + CommunityToolkit.Mvvm, как реализовать команды отмены/повтораC# - расшифровка AES-GCM обнулит IVВ учетных данных отсутствует обязательное поле nonce. Убедитесь, что у вас есть все необходимые параметры для запроса на вход. [Открытый идентификатор Azure]ASP.NET Core 8.0 SignalR: успешное подключение, но уведомления на клиенте не полученыПочему сведения о проблеме не возвращаются в ответе HTTP из моей реализации IExceptionHandler?