如何编写一个正则表达式以匹配变量声明的十六进制值?

时间:2018-08-14 13:53:45

标签: c# regex

我正在尝试编写正则表达式以匹配可能包含以下内容之一的字符串:

  1. 有效的十六进制数字-例如“ 0xa4”(0[xX][0-9a-fA-F]+
  2. 变量定义-例如“ $ my_var”(\$[0-9a-zA-Z_]+
  3. 项目1和项目2的组合-例如,“ 0xa $ my_var”(??

我尝试过:

^(?:0[xX][0-9a-fA-F]+|\$[0-9a-zA-Z_]+)$-但这不支持规则3

^(?:0[xX][$0-9a-zA-Z]+)$-它支持所有条件,但也匹配0x1z,这当然不是有效的十六进制(违反规则1)

正在寻求社区的帮助...

1 个答案:

答案 0 :(得分:1)

您可以使用基于锚定交替组的正则表达式,其中一个分支包含两个模式,其中一个是可选的:

^(?:0[xX][0-9a-fA-F]+(?:\$[0-9a-zA-Z_]+)?|\$[0-9a-zA-Z_]+)$

请参见regex demo

详细信息

  • ^-字符串的开头
  • (?:-一个非捕获组的开始:
    • 0[xX][0-9a-fA-F]+-0xX,1个以上的十六进制字符
    • (?:\$[0-9a-zA-Z_]+)?-$字符和1个以上字符的字符的可选序列
  • |-或
    • \$-一个$字符
    • [0-9a-zA-Z_]+-1个以上的字符字符
  • )-非捕获组的结尾
  • $-字符串的结尾。