Как узнать, какой вариант в Regex был выбран? - PullRequest
0 голосов
/ 13 марта 2019

У меня есть регулярное выражение, соответствующее нескольким параметрам.

например. ^0x[\da-fA-F]+|-?\d+$ - регулярное выражение для сопоставления десятичных или шестнадцатеричных литералов

Есть ли возможность узнать, какая опция в конечном итоге соответствует шаблону?

так для ...

  • -10 - был выбран десятичный параметр
  • 0x1Af - выбран шестнадцатеричный вариант

1 Ответ

5 голосов
/ 13 марта 2019

Я думаю, что вы имели в виду это регулярное выражение:

^(?:-?\d+|0x[\da-fA-F]+)$

с начальным и конечным якорями не часть альтернатив.

Вы можете захватить различные альтернативы:

^(?:(-?\d+)|(0x[\da-fA-F]+))$

Теперь вам просто нужно проверить, не является ли группа нулевой. Если это соответствует первому варианту, группа 1 будет ненулевой. Если это соответствует второму варианту, группа 2 будет не нулевой:

Match m = Regex.Match(...);
if (m.Groups[1] != null) {
    // first alternative matched!
} else if (m.Groups[2] != null) {
    // second alternative matched!
}

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

^(?:(?<decimal>-?\d+)|(?<hex>0x[\da-fA-F]+))$

Теперь вам нужно проверить m.Groups["decimal"] и m.Groups["hex"].

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