Я пытаюсь реализовать выражение регулярного выражения для анализа различных групп строки. Предоставленная мной строка указывает клиенту, который хочет изменить свой основной язык на нашей платформе с X на Y, поэтому он будет выглядеть следующим образом:
language_change__from_english_to_spanish
language_change__from_spanish_to_somali
language_change__from_simplified_chinese_to_english
У меня есть регулярное выражение для анализа языков (исходный язык, а затем новый язык):
SUBSTRING(language_field FROM '^language_change__([a-zA-Z_]+)_to_[a-zA-Z_]+$')
Работает отлично для оригинального языка, но не так хорошо для нового языка, потому что иногда люди вводят в language_change__from_english_to_spanish_
. Таким образом, на самом деле анализируется spanish_
вместо spanish
.
Я знаю, что я мог бы просто обернуть SUBSTRING(...)
REPLACE
, чтобы заменить окончательный _
, но я пытаясь найти способ сделать это с помощью регулярных выражений, чтобы отточить свои навыки регулярных выражений. Я в основном хочу игнорировать финал _
. Однако я не могу удалить _
из моей группы захвата, потому что некоторые языки, закодированные в нашей системе, имеют, например, _
: simplified_chinese
.
По сути, я хочу, чтобы моя группа захвата включала первый _
, за которым следует текст (например, simplified_chinese
), но не включайте _
, если он находится в конце строки (english_
).
Поэтому, когда language_change__from_spanish_to_english_
Введенный, я все еще должен захватить english
, а не english_
в качестве языка.
Я пробовал различные способы:
- Использование отрицательный взгляд :
SUBSTRING(language_field FROM '^language_change__[a-zA-Z_]+_to_([a-zA-Z_]+)(?!_)$')
- Использование не жадных групп захвата :
SUBSTRING(language_field FROM '^language_change__[a-zA-Z_]+_to_([a-zA-Z_]+?)$')
- Использование комбинации отрицательных прогнозных и не жадных групп захвата :
SUBSTRING(language_field FROM '^language_change__[a-zA-Z_]+_to_([a-zA-Z_]+?)(?!_)$')
Мне кажется, что я достаточно долго работал в StackOverflow, чтобы не сказать "ничего не работает", но все три вещи, которые я пробовал выше, все равно дают english_
, а не english
когда люди неправильно ввели language_change__from_spanish_to_english_
с нашей стороны.
Может кто-нибудь подсказать, что мне не хватает?