Я хочу извлечь страницу и номер страницы из URL-адреса с помощью регулярного выражения. Есть несколько вариантов номера страницы:

fghghdsfs/page4
fghghdsfs/page-4
sfgsfgsfg/page=4
hteheth/page-4/
dhdghgd/page=4/
dghdghdh/page/4/
dghdghdh/page/4
fghghdsfs?page4
dhdghd?page-4
dghdg?page-4/
eyeyt?page=4
etyetyet?page=4/
nvnndgnd?page/4/
dghdghdh/page/4

Номер страницы должен содержать от 1 до 3 цифр.

Я пробовал использовать это регулярное выражение, но у меня возникла проблема с определением /:

(=|\?|\/)(page)(_|-|=|\d{1,3}|\/)
0
taga 24 Ноя 2021 в 13:51
Какая у вас проблема с идентификацией /?
 – 
mkrieger1
24 Ноя 2021 в 13:53

2 ответа

Лучший ответ

У вас есть две проблемы с регулярным выражением:

  1. \d{1,3} заключен в круглые скобки. Вы говорите: page, за которым следует либо разделитель , либо рядом с номером страницы. Поместите его после скобок и сделайте группой захвата, чтобы вы могли извлечь ее позже.
  2. Группа с разделителями обязательна, поэтому page4 не соответствует. Поставьте ? после группы.

Исправление тех:

(=|\?|\/)(page)(_|-|=|\/)?(\d{1,3})

Посмотрите его в действии на regex101.

1
Thomas 24 Ноя 2021 в 13:56

Вы можете использовать это регулярное выражение:

[=?/]page[_=/-]?(\d{1,3})

Демо RegEx

Сведения о регулярном выражении:

  • [=?/]: соответствие = или ? или /
  • page: строка соответствия page
  • [_=/-]?: Необязательно соответствие _ или =, или /, или -
  • (\d{1,3}): соответствие от 1 до 3 цифр.
1
anubhava 24 Ноя 2021 в 13:56
1
Я удалил группу захвата, и тогда у нас практически одинаковые ответы. Я бы пошел на этот ответ.
 – 
The fourth bird
24 Ноя 2021 в 14:17