C#正则表达式和美元符号

ray*_*ran 6 c# regex hex

我创建了一个正则表达式来突出显示某些程序集样式的十六进制数字,如下所示:

$00  
$1400  
$FFFFFF
Run Code Online (Sandbox Code Playgroud)

有时它们也会以#开头.所以我创建了这个正则表达式作为开始:

@"\b(\$)[A-Fa-f\d]+\b"
Run Code Online (Sandbox Code Playgroud)

当我尝试它时,似乎没有任何匹配.但是,如果我将\ $替换为0x,它可以正常工作并返回C#样式十六进制数字的匹配,如0x0F,0xFF等.

为什么是这样?我花了几个小时试图让这个正则表达式工作,但我不能也不知道为什么.任何帮助,将不胜感激.

Kob*_*obi 6

\b字母数字字符和非字母数字字符之间的匹配 - 它与$#,空格或其他字符不匹配.您可能想完全放弃它:

@"(\$)[A-Fa-f\d]+\b"
Run Code Online (Sandbox Code Playgroud)

如果你不希望要匹配的模式与之前的字母数字字符,你可以添加\B之前,(所以#$00a $00会匹配,但a$00不会).你也可以更挑剔,只允许某些字符:

@"(?<=[\w$])(\$)[A-Fa-f\d]+\b"
Run Code Online (Sandbox Code Playgroud)

另请参见:Word Boundaries