我需要一些帮助来找出控制字符的 XML 字符引用的正则表达式,以十进制或十六进制表示。
这些序列如下所示:
换句话说,它们是一个 & 符号,后跟一个井号,后跟一个可选的“x”来表示十六进制模式,然后是 1 到 4 个十进制(或十六进制)数字,然后是一个分号。
我特别试图识别那些包含(包括)从十进制 0 到 31 或十六进制 0 到 1F 的数字的序列。
任何人都可以找出这个正则表达式吗?
我需要一些帮助来找出控制字符的 XML 字符引用的正则表达式,以十进制或十六进制表示。
这些序列如下所示:
换句话说,它们是一个 & 符号,后跟一个井号,后跟一个可选的“x”来表示十六进制模式,然后是 1 到 4 个十进制(或十六进制)数字,然后是一个分号。
我特别试图识别那些包含(包括)从十进制 0 到 31 或十六进制 0 到 1F 的数字的序列。
任何人都可以找出这个正则表达式吗?
如果您使用零宽度前瞻断言来限制位数,您可以编写模式的其余部分而不必担心长度限制。尝试这个:
&#(?=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
。
&#(0{0,2}[1-2]\d|000\d|0{0,2}3[01]|x0{0,2}[01][0-9A-Fa-f]);
它不是最优雅的,但它应该可以工作。
在 RegexBuddy 中验证。
我认为以下应该有效:
&#(?:x0{0,2}[01]?[0-9a-fA-F]|0{0,2}(?:[012]?[0-9]|3[01]));
这是一个Rubular:
http ://www.rubular.com/r/VEYx25Fdpj