Это поможет решить вашу конкретную проблему. Это выражение
/\/page\/(0*[1-9][0-9]*)/ or "Perl-compatible" /\/page\/(0*[1-9]\d*)/
должен захватывать любое ненулевое число, даже заполненное 0. И поскольку он даже не ищет знака, -
после косой черты не будет соответствовать шаблону.
Проблема с выражением лица без век заключается в том, что, скорее всего, у вас еще нет выделенного числа, чтобы сработали ^
и $
. Вам придется проделать некоторую работу , чтобы изолировать это. Но общее решение не состояло бы в том, чтобы предположить, что число - это все, что содержит строка, как показано ниже.
/(^|[^0-9-])(0*[1-9][0-9]*)([^0-9]|$)/
А две конечные группы вы можете заменить на границы слова отметки (\b
), если они есть в языке RE. В противном случае вы бы поместили их в группы без захвата, если бы язык имел их, или даже искали обходные пути, если бы они были таковыми - но, скорее всего, у них были бы границы слов перед поисковыми обходами.
Полная Совместимая с Perl версия:
/(?<![\d-])(0*[1-9]\d*)\b/
Я выбрал отрицательный вид сзади вместо границы слова, потому что '-' не является словом-символом, и поэтому -1 будет иметь «границу слова» между «-» и «1». И отрицательный взгляд сзади будет соответствовать началу строки - просто не может быть цифры или «-» впереди.
Можно сказать, что предположение о нулевой ширине ^
является лишь одним из случаев, когда выполняется предположение о нулевой ширине (?<![\d-])
.