Скажем, задача состояла в том, чтобы добавить последние цифры в коде продукта к себе с дефисом между исходным и добавленным числами (чисто для экспериментов).
Я хотел бы понять, почему необходимо включить пробелв следующем примере:
with foo ( prod )
as ( values ('MYPRODUCT 123'))
select
'dot aster space' as test_type,
'''(.* (\d+))'',''$1-$2''' as the_regex,
regexp_replace(prod,'(.* (\d+))','$1-$2')
from foo
UNION ALL
select
'dot aster no space',
'''(.*(\d+))'',''$1-$2''',
regexp_replace(prod,'(.*(\d+))','$1-$2')
from foo
Результат
TEST_TYPE THE_REGEX REGEXP_REPLACE
dot aster space '(.* (\d+))','$1-$2' MYPRODUCT 123-123
dot aster no space '(.*(\d+))','$1-$2' MYPRODUCT 123-3
Я бы ожидал, что, поскольку точка соответствует любому символу, включая пробел, два регулярных выражения будут иметь одинаковый результат.
Однако, даже принимая это, я не могу понять, почему во второй группе фиксируются только последние 3.
Спасибо.