powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Regex
3 сообщений из 3, страница 1 из 1
Regex
    #38967181
вопросец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть статический метод Regex.Matches. Возвращает MatchCollection. Как мне при переборе групп в этой коллекции узнать имена этих групп. В случае instance-метода Matches все понятно (есть Instance метод GetGroupNameFromNumber). Смотрел рефлектором и судя по всему этого нельзя сделать в случае статики. Но может я ошибаюсь?
...
Рейтинг: 0 / 0
Regex
    #38967195
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Штатными методами - да, нелья, имена групп - это часть метаданных самого регекса, экземпляр которого в случае статики уничтожается при выходе из статик-метода (статический Matches - это просто обертка над созданием нового регекса, и вызовом инстансого Matches).
При желании можно извратиться так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
const string pattern = @"(?<duplicateWord>\w+)\s\k<duplicateWord>\W(?<nextWord>\w+)";
const RegexOptions options = RegexOptions.IgnoreCase;
var rxTree = typeof(Regex).Assembly.GetType("System.Text.RegularExpressions.RegexParser")
  .GetMethod("Parse", BindingFlags.Static | BindingFlags.NonPublic)
  .Invoke(null, new object[] { pattern, options });
var result = (Hashtable)rxTree.GetType()
  .GetField("_capnames", BindingFlags.NonPublic | BindingFlags.Instance)
  .GetValue(rxTree);
foreach (DictionaryEntry de in result)
  Console.WriteLine("{0} {1}", de.Key, de.Value);


Если от статики отказаться нельзя, я бы предпочел сделать метод, который внутри себя еще раз по тем же паттерну и опциям создавал новый регекс, и получал от него словарь с группами (что-то матчить при этом необязательно).
...
Рейтинг: 0 / 0
Regex
    #38967211
вопросец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Большое спасибо. Через рефлекшн не катит.

авторстатики отказаться нельзя, я бы предпочел сделать метод

Этот вариант рассматривал. Но увы конструктор с параметром cached который вызывается всеми статическими методами объявлен private. А это очень вкусный кусок.

И что характерно, возвращаемый MatchCollection тоже содержит private пле типа Regex :).
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Regex
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]