我需要一些帮助来确定用于控制字符的
XML字符引用的正则表达式,以十进制或十六进制表示.
这些序列如下所示:
�




换句话说,它们是一个&符号,后跟一个磅,后跟一个可选的’x’表示十六进制模式,后跟1到4个十进制(或十六进制)数字,后跟一个分号.
我特意尝试识别那些包含十进制0到31或十六进制0到1F的(包含)数字的序列.
任何人都可以找出这个正则表达式?
解决方法
如果使用
zero-width lookahead assertion来限制数字位数,则可以编写模式的其余部分而不必担心长度限制.试试这个:
&#(?=x?[0-9A-Fa-f]{1,4})0*([12]?\d|3[01]|x0*1?[0-9A-Fa-f]);
说明:
(?=x?[0-9A-Fa-f]{1,4}) #Restricts the numeric portion to at most four digits,including leading zeroes. 0* #Consumes leading zeroes if there is no x. [12]?\d #Allows decimal numbers 0 - 29,inclusive. 3[01] #Allows decimal 30 or 31. x0*1?[0-9A-Fa-f] #Allows hexadecimal 0 - 1F,inclusive,regardless of case or leading zeroes.
该模式允许在x之后的前导零,但是(?= x?[0-9A-Fa-f] {1,4})部分阻止它们在x之前发生.