Использование регулярного выражения для поиска ссылок на символы XML для управляющих символов - PullRequest
4 голосов
/ 16 сентября 2011

Мне нужна помощь в определении регулярного выражения для ссылок на символы XML для управляющих символов в десятичном или шестнадцатеричном виде.

Эти последовательности выглядят следующим образом:

& # 0;



Другими словами, это амперсанд, за которым следует фунт, затем необязательный 'x' для обозначения шестнадцатеричного режима, за которым следует 1до 4 десятичных (или шестнадцатеричных) цифр, за которыми следует точка с запятой.

Я специально пытаюсь определить те последовательности, в которых они содержат (включительно) числа от десятичного 0 до 31 или шестнадцатеричного от 0 до 1F.

Может кто-нибудь выяснить регулярное выражение для этого ??

Ответы [ 3 ]

3 голосов
/ 16 сентября 2011
&#(0{0,2}[1-2]\d|000\d|0{0,2}3[01]|x0{0,2}[01][0-9A-Fa-f]);

Это не самое элегантное, но оно должно работать.

Проверено в RegexBuddy.

results

3 голосов
/ 16 сентября 2011

Если вы используете предположение нулевой ширины для ограничения количества цифр, вы можете написать оставшуюся часть шаблона, не беспокоясь об ограничении длины. Попробуйте это:

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

2 голосов
/ 16 сентября 2011

Я думаю, что должно работать следующее:

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

Вот рубул:
http://www.rubular.com/r/VEYx25Fdpj

...