我正在尝试编写正则表达式以匹配可能包含以下内容之一的字符串:
0[xX][0-9a-fA-F]+
)\$[0-9a-zA-Z_]+
)??
)我尝试过:
^(?:0[xX][0-9a-fA-F]+|\$[0-9a-zA-Z_]+)$
-但这不支持规则3
^(?:0[xX][$0-9a-zA-Z]+)$
-它支持所有条件,但也匹配0x1z
,这当然不是有效的十六进制(违反规则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]+
-0
,x
或X
,1个以上的十六进制字符(?:\$[0-9a-zA-Z_]+)?
-$
字符和1个以上字符的字符的可选序列|
-或
\$
-一个$
字符[0-9a-zA-Z_]+
-1个以上的字符字符)
-非捕获组的结尾$
-字符串的结尾。