我创建了一个正则表达式来突出显示某些程序集样式的十六进制数字,如下所示:
$00
$1400
$FFFFFF
有时它们也会以#开头。所以我创建了这个正则表达式作为开始:
@"\b(\$)[A-Fa-f\d]+\b"
当我试用它时,似乎没有任何匹配。但是,如果我将\ $替换为0x,它可以正常工作并返回C#样式十六进制数字的匹配,如0x0F,0xFF等。
这是为什么?我花了几个小时试图让这个正则表达式工作,但我不能也不知道为什么。任何帮助将不胜感激。
答案 0 :(得分:5)
\b
匹配字母数字字符和非字母数字字符 - 它在$
和#
,空格或其他字符之间不匹配。你可能想完全放弃它:
@"(\$)[A-Fa-f\d]+\b"
如果您不希望模式与之前的字母数字字符匹配,则可以在其前面添加\B
(因此#$00
和a $00
匹配,但{{1 }} 不会)。你也可能更挑剔,只允许某些字符:
a$00
另请参阅:Word Boundaries
答案 1 :(得分:4)
问题是单词边界\b
。它符合美元符号后。例如,这个可以工作@"(\$)[A-Fa-f\d]+"
答案 2 :(得分:2)
如果你在开始时删除\b
,它会正常工作。然后就会变成
@"(\$)[A-Fa-f\d]+\b"
\b
匹配单词字符和非单词字符之间的边界,$
这里是非单词字符。