Как получить все символы до / с использованием регулярных выражений?

В postgresql возникла необходимость получать строку, либо часть строки до /, содержащую только цифры.

Уже пару часов бьюсь над проблемой и не получается решить.

Строчки могут быть вида "1235", "1234/12", "dfhdhj1232", "dfhdhj1232/12"

Из этих строк мне нужно получить
"1235", "1234", "не валидная", "не валидная" соотственно.

В этов примере все работает хорошо, если есть /, когда его нет, выражение возвращает null.
select substring('123405/99' from '#"%[0-9]#"/%' for '#')

При попытке использовать
select substring('123405/99' from '#"%[0-9]#"/?%' for '#')

будет 123405/99 , что меня удивляет, т.к. я же получаю только то, что ограничнно символами #" .

Пробовал использовать (?=re), но так же не получил желаемого результата.

select substring('123405/99' from '^(?=1)([0-9]{1,2})' for '#')


Подскажите пожалуйста верный вариант выражения и где же я ошибаюсь в попытках составить верное выражение?
  • Вопрос задан
  • 3571 просмотр
Решения вопроса 2
@asd111
Попробуйте:
select regexp_matches('1235', '^(\d+)\/?');
select regexp_matches('1234/12', '^(\d+)\/?');
select regexp_matches('dfhdhj1232', '^(\d+)\/?');
select regexp_matches('dfhdhj1232/12', '^(\d+)\/?');
Ответ написан
@Skinner2170 Автор вопроса
Правильный ответ нашел:
substring('123405/s99' from '^(\d+)(/.*)?$')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы