Извлеките указанные c части URL с помощью регулярных выражений и перепишите - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь переписать некоторые URL-адреса и извлечь их значения параметров через имена путей с помощью одного регулярного выражения. URL может иметь несколько вариантов, и s-член, pg-n, порядок сортировки и т. Д. Могут быть в любом порядке. За исключением категории, которая всегда стоит первой после URL сайта.

Пример 1: www.test.com/freebies/s-term/pg-2/

  • Извлечение $ 1 = бесплатные, $ 2 = срок, $ 3 = 2
  • Итак, я могу переписать на www.test.com?category= $ 1 & s = $ 2 & page = $ 3

Пример 2: www.test.com/freebies/pg-2/

  • Извлечение $ 1 = бесплатные, $ 2 = '', $ 3 = 2

  • Так что тогда я могу переписать в www.test.com?category= $ 1 & s = $ 2 & page = $ 3

Все возможные комбинации

http://localhost:8888/pg-2/
http://localhost:8888/s-term/
http://localhost:8888/s-term/pg-2/
http://localhost:8888/s-term/pg-2/
http://localhost:8888/freebies/
http://localhost:8888/freebies/pg-2/
http://localhost:8888/freebies/s-term/
http://localhost:8888/freebies/s-term/pg-2/

В любом случае я хочу получить категорию в группе 1, searchterm в группе 2, пейджинг в группе 3, sort- порядок в группе 4


Вот что я пробовал до сих пор, но в области замены вы можете видеть, что она заменяет каждый раз, когда находит совпадение, и я хочу заменить весь URL новым и включить группы data.

https://regex101.com/r/4v1uf5/10

Считаете ли вы, что это возможно с помощью регулярных выражений или .htaccess переписать будет лучше?

Спасибо!

1 Ответ

0 голосов
/ 03 мая 2020

Наконец-то решили, используя несколько групп одну за другой, чтобы извлечь значения:

(?:(freebies)\/|pg-([^\/]+)\/|s-([^\/]+)\/)\/?(?:s-([^\/]+)\/|pg-([^\/]+)\/)?(?:pg-([^\/]+)\/)?


Демо здесь: https://regex101.com/r/4v1uf5/26

...