У меня есть оператор SQL SELECT DB2 v7r3 с тремя экземплярами REGEXP_SUBSTR (), все с одинаковой строкой шаблона регулярного выражения, каждая из которых извлекает одну из трех групп.
Я бы хотел изменить первый SUBSTR на REGEXP_REPLACE (), чтобы выполнить условную замену, если совпадений нет, чтобы вставить значение по умолчанию, аналогичное разделу ELSE в CASE ... END. Но я не могу заставить это работать. Я мог бы легко использовать CASE, но он кажется более компактным и эффективным для использования RegEx.
Например, у меня есть описания размеров пищевых контейнеров в различных состояниях полноты:
- 12X125
- 6X350
- 1X1500
- 1500ml
- 1000
Последние два не имеют части 'nnX' в начале, в этом случае подразумевается '1X', и ее необходимо вставить.
Это моя текущая рабочая строка шаблона:
^(?:(\d{1,3})(?:X))?((?:\d{1,4})(?:\.\d{1,3})?)(L|ML|PK|Z|)$
Возвращаемые группы: количество, размер и единица измерения.
Но только первая группа нуждается в условной замене:
(?:(\d{1,3})(?:X))?
Эта веб-страница RexEgg описывает оператор (?=...)
, и, похоже, это то, что мне нужно, но я не уверен. Он находится в списке операторов для моей версии DB2, но я не могу заставить его работать. Честно говоря, это немного глубже, чем мои знания регулярных выражений, и я даже не могу заставить его работать в моем любимом онлайн-тестере регулярных выражений, Regex101 .
Так ... у кого-нибудь есть идеи или предложения ..? Спасибо.