C # регулярное выражение и знак доллара - PullRequest
6 голосов
/ 23 октября 2011

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

$00  
$1400  
$FFFFFF

Иногда им также предшествует знак #.Поэтому я создал это регулярное выражение в качестве начала:

@"\b(\$)[A-Fa-f\d]+\b"

Когда я его опробовал, то, похоже, оно не соответствовало ничему.Однако если я заменим \ $ на 0x, он будет работать нормально и вернет совпадения для шестнадцатеричных чисел в стиле C #, таких как 0x0F, 0xFF и т. Д.

Почему это так?Я потратил несколько часов, пытаясь заставить это регулярное выражение работать, но я просто не могу и понятия не имею, почему.Любая помощь будет оценена.

Ответы [ 3 ]

5 голосов
/ 23 октября 2011

\b соответствует буквенно-цифровому символу и не буквенно-цифровому символу - он не соответствует $ и #, пробелам или другим символам. Вы можете отказаться от него целиком:

@"(\$)[A-Fa-f\d]+\b"

Если вы не хотите, чтобы шаблон совпадал с буквенно-цифровым символом перед ним, вы можете добавить \B перед ним (так что #$00 и a $00 будут соответствовать, но a$00 не будет). Вы также можете быть более разборчивыми и запретить только определенные символы:

@"(?<=[\w$])(\$)[A-Fa-f\d]+\b"

См. Также: Границы слова

4 голосов
/ 23 октября 2011

Проблема в слове границы \b.Это соответствует после знака доллара.Например, этот будет работать @"(\$)[A-Fa-f\d]+"

2 голосов
/ 23 октября 2011

Будет хорошо, если вы уберете \b в начале.Тогда он станет

@"(\$)[A-Fa-f\d]+\b"

\b, совпадающим с границей между символом слова и несловесным символом, а $ здесь является несловарным символом.

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