Relax NG не поддерживает регулярное выражение конца строки (в долларах)
Мне нужно дать некоторые ограниченные возможности для атрибута в XML, для этого я использую в документе проверки Relax NG:
<param "pattern">myRegEx</param>
позволяя указать некоторое регулярное выражение, которому должен соответствовать атрибут.
По какой-то причине шаблон не поддерживает использование знака $ (конец строки).
Пример:
<param "pattern">Why it does not work??$</param>
Это должно соответствовать строке, заканчивающейся на "Почему это не работает??" предложение. Но $, кажется, полностью игнорируется при проверке.
Кто-нибудь понимает почему?
благодарю вас
Натаниель
1 ответ
Параметр "шаблон" ГСЧ имеет ту же семантику *, что и фасет шаблона в определении простого типа XSD. Шаблоны XSD применяются ко всему проверяемому лексическому элементу - шаблоны XSD не используют ^ и $ в качестве якорей начала строки и конца строки, поскольку шаблоны XSD всегда соответствуют либо всей входной строке, либо не совпадают. (Возможно, было бы лучше для людей, которые предполагают, что все языки регулярных выражений имеют ^ и $, если XSD указал, что они игнорируются в начале и конце шаблонов, но этого не произошло.)
Если вы хотите определить шаблон, который соответствует любому текстовому узлу, оканчивающемуся строкой "Почему это не работает??", вместо одного, соответствующего любой из двух строк "Почему это не работает $" или "Почему это не работает?" $", вы захотите написать
<param name="pattern">.*Why does it not work\?\?</param>
Замечания:
- потерять
- сбежать?
(* Существует одна необоснованная несовместимость при обработке нескольких паттернов, но здесь она не имеет отношения.)