Мне нужно сопоставить $ в выражении регулярного выражения в C #, и не могу понять это - PullRequest
1 голос
/ 17 марта 2019

Вот что я пробовал

CSharpClassNameRegex = new Regex(@"\b(\x36|class|\$|function|struct|enum|interface)(?<range>\w+?)\b", RegexCompiledOption);

, где \ x36 и \ $ представляют '$'

Они не возвращают совпадение, хотя другие ключевые слова.

1 Ответ

1 голос
/ 17 марта 2019

Символ $ не является словом char, а \b требует слово char перед ним.

Вы можете исправить свое регулярное выражение, используя однозначную левую границу слова, (?<!\w):

CSharpClassNameRegex = new Regex(@"(?<!\w)(class|\$|function|struct|enum|interface)(?<range>\w+)", RegexCompiledOption);

Обратите внимание, что \w+?\b можно безопасно заменить на \w+, \w+ будет жадно сопоставлять 1 или более символов слова, и вам не нужно принудительно сопоставлять 1 или более символов слова с границей слова.

Кроме того, \x36 соответствует 6 char, поэтому я сомневаюсь, что вам нужно оставить его в регулярном выражении.

Regex details

  • (?<!\w) - слева от текущего местоположения нельзя использовать слово char
  • (class|\$|function|struct|enum|interface) - Группа 1: class, $, function, struct, enum, interface подстроки
  • (?<range>\w+) - Именованная группа «диапазон»: 1 или более слов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...