C #: Каким должно быть регулярное выражение для этого? - PullRequest
1 голос
/ 03 февраля 2010

Я знаю, что существует множество ASN.1 парсеров, но они стоят довольно дорого, и поэтому я пытаюсь написать свой собственный.

Я новичок в Регулярном выражении, поэтому для извлечения текста для заполнителей A, B, C и D, каким должно быть Регулярное выражение в C #?

A ::= B
{
    C1 D1,
    C2 D2,
    C3 D3
}

где A, C и D могут быть любым допустимым словом, которое состоит из любой комбинации следующих

  • A-Z
  • a-z
  • 0-9
  • _

И B могут быть любыми типами ASN.1, такими как «SEQUENCE», «SEQUENCE OF», «CHOICE», «UTF8String» и т. Д. Полный список можно найти в таблице «Теги универсального класса» на этом ссылка .

1 Ответ

1 голос
/ 03 февраля 2010

Вы хотите сказать, что хотите сопоставить всю эту конструкцию с одним регулярным выражением? Это плохая идея. Регулярные выражения могут быть полезны как компонент синтаксического анализатора, но лучше всего свести их роль к минимуму. Не пытайтесь сопоставлять большие куски текста, особенно рекурсивные или циклические структуры. Регулярные выражения C # достаточно мощны, чтобы справляться с такими вещами во многих случаях, но не во всех - и в любом случае это далеко за пределы начального уровня.

Я предлагаю вам попробовать без использования регулярных выражений. В противном случае вы будете постоянно отвлекать себя, задаваясь вопросом, как техника регулярных выражений, которую вы еще не изучили, облегчит текущую задачу или решит проблему более элегантно (если вы простите мой язык). Сконцентрируйтесь на написании надежного, удобочитаемого, поддерживаемого кода - это еще одна слабость регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...