4

我需要一些帮助来找出控制字符的 XML 字符引用的正则表达式,以十进制或十六进制表示。

这些序列如下所示:







换句话说,它们是一个 & 符号,后跟一个井号,后跟一个可选的“x”来表示十六进制模式,然后是 1 到 4 个十进制(或十六进制)数字,然后是一个分号。

我特别试图识别那些包含(包括)从十进制 0 到 31 或十六进制 0 到 1F 的数字的序列。

任何人都可以找出这个正则表达式吗?

4

3 回答 3

3

如果您使用零宽度前瞻断言来限制位数,您可以编写模式的其余部分而不必担心长度限制。尝试这个:

&#(?=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

于 2011-09-15T21:02:03.170 回答
3
&#(0{0,2}[1-2]\d|000\d|0{0,2}3[01]|x0{0,2}[01][0-9A-Fa-f]);

它不是最优雅的,但它应该可以工作。

在 RegexBuddy 中验证。

结果

于 2011-09-15T20:41:41.560 回答
2

我认为以下应该有效:

&#(?:x0{0,2}[01]?[0-9a-fA-F]|0{0,2}(?:[012]?[0-9]|3[01]));

这是一个Rubular:
http ://www.rubular.com/r/VEYx25Fdpj

于 2011-09-15T20:30:43.703 回答