4

10進数または16進数の制御文字へのXML文字参照の正規表現を理解するのに助けが必要です。

これらのシーケンスは次のようになります。

�





つまり、アンパサンド、ポンド、16進モードを示すオプションの「x」、1〜4桁の10進数(または16進)、セミコロンが続きます。

具体的には、10進数の0から31、または16進数の0から1Fまでの(包括的)数値が含まれているシーケンスを特定しようとしています。

誰かがこれの正規表現を理解できますか?

4

3 に答える 3

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 に答える
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 に答える
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 に答える