Вы можете использовать
.*(?:\D|^)(\d+)
для получения последнего номера; это связано с тем, что совпадёт будет сожрать все символы с помощью .*
, затем вернуться к первому несимметричному символу или началу строки, а затем сопоставить конечную группу цифр.
Ваш отрицательный результат не работает, потому что в строке «1 3», например, 1
сопоставляется \d+
, тогда пространство соответствует отрицательному lookahead (поскольку это не последовательность из одной или нескольких цифр). 3
даже не смотрел.
Обратите внимание, что в вашем примере regex нет никаких групп, поэтому я не уверен, как вы извлекали номер.