После тройной проверки, что регулярные выражения XML Schema (XSD) на самом деле не поддерживают никаких функций, которые могли бы облегчить эту задачу (в частности, предпросмотры и привязки), я предложил это похоже на работу. Я использовал режим свободного пробела, чтобы его было легче читать, но это еще одна функция, не поддерживаемая XSD.
[^ibs].* |
i(.{0,1} | [^n].* | n[^t].* | nt.+) |
b(.{0,2} | [^y].* | y[^t].* | yt[^e].* | yte.+) |
s(.{0,4} | [^t].* | t[^r].* | tr[^i].* | tri[^n].* | trin[^g].* | tring.+)
Первая альтернатива соответствует всему, что не начинается с начальной буквы любого из ключевых слов. Каждая из других альтернатив верхнего уровня соответствует строке, которая начинается с той же буквы, что и одно из ключевых слов, но:
- короче, чем ключевое слово,
- имеет другую вторую букву, другую третью букву и т. Д., Или
- длиннее ключевого слова.
Обратите внимание, что регулярные выражения XSD не поддерживают явные привязки (т. Е. ^
, $
, \A
, \z
), но все совпадения неявно привязываются с обоих концов.
Одна потенциальная проблема, которую я вижу: если список ключевых слов длинный, вы можете столкнуться с ограничением длины регулярного выражения.