RegEx для захвата идентификационных номеров в URL - PullRequest
0 голосов
/ 16 мая 2019

Я хочу поймать идентификаторы в URL с preg_match.

Regex:

/news.[a-z0-9A-Z_ -]*.?(\d+).?(?:page)?.?([0-9]+)?\.html

Я хочу поймать (\ d +) URL, верно?

URL

http://localhost/news/content-287.html

Токовый выход

==> preg_match поймать это:

Array:
  0 => string '/news/content-287.html' (length=22)
  1 => string '7' (length=1)

Как мне решить эту проблему?

РЕДАКТИРОВАТЬ:

В идеале я хотел бы, чтобы URL был таким:

/ news / title-is / page = 2.html И поймать идентификатор заголовка и номер страницы ...

: D Спасибо, Эмма

1 Ответ

0 голосов
/ 16 мая 2019

Возможно, вы захотите упростить свое выражение.Например, здесь мы можем просто использовать группы захвата для нацеливания ваших желаемых идентификаторов в URL.Возможно, этого выражения будет достаточно:

\/news\/([a-z-]+)([0-9]+)\.html

, который вы можете дополнительно добавить / уменьшить его границы, если хотите.Например, вы можете добавить любые другие символы, которые могут стоять перед идентификаторами в этой группе ([a-z-]+), тогда ваше выражение изменится на:

\/news\/([a-z-\/=]+)([0-9]+)\.html

RegEx

Если это был не вашжелаемое выражение, вы можете изменить / изменить свои выражения в regex101.com .

enter image description here

RegEx Circuit

Вы также можете визуализировать свои выражения в jex.im :

enter image description here

Код

$pattern = '/\/news\/([a-z-\/=\?]+)([0-9]+)\.html/is';
$subject = 'http://localhost/news/content/title-id/id=287.html';
preg_match_all($pattern, $subject, $matches);

var_dump($matches);

Вывод

array(3) {
  [0]=>
  array(1) {
    [0]=>
    string(34) "/news/content/title-id/id=287.html"
  }
  [1]=>
  array(1) {
    [0]=>
    string(20) "content/title-id/id="
  }
  [2]=>
  array(1) {
    [0]=>
    string(3) "287"
  }
}
...