Регулярное выражение в preg_replace для определения формата URL и извлечения элементов - PullRequest
0 голосов
/ 25 октября 2010

Мне нужно заменить определенные введенные пользователем URL-адреса встроенными flash-объектами ... и у меня возникли проблемы с регулярным выражением, которое я использую для сопоставления с URL-адресом ... Я думаю, в основном потому, что URL-адреса оптимизированы для SEO и, следовательно, немного сложнее разобрать

URL structure: http://www.site.com/item/item_title_that_can_include_1('_etc-32CHARACTERALPHANUMERICGUID

Мне нужно как обнаружить совпадение URL в этом формате, так и перехватить 32CHARACTERALPHANUMERICGUID, который всегда помещается после - в URL

как то так:

$ret = preg_replace('#http://www\.site\.com/item/([^-])-([a-zA-Z0-9]+)#','<embed>itemid=$2</embed>', $ret);

По какой-то причине, приведенное выше не находит соответствия для URL в указанном формате. Я новичок в регулярных выражениях, поэтому я думаю, что упускаю что-то довольно очевидное.

1 Ответ

2 голосов
/ 25 октября 2010

Вы должны проверить parse_url().

Изучите результаты - это было сделано для разбора URL. Вы сможете извлечь необходимые данные из возвращенных токенов.

Если ты сумасшедший, попробуй это ...

/^http:\/\/www\.site\.com\/item\/[^-]*\-([a-zA-Z0-9]{32})$/

Ваш пример почти у цели, , но ...

  • Когда вы вводите диапазон не символов, т. Е. [^-], вам все еще нужен квантификатор. Я поставил *, или 0 или более .
  • Похоже, вы не используете заголовок элемента , поэтому мы не будем его захватывать.
  • Вы должны использовать начальный (^) и конечный ($) якоря, если строка всегда точно такая же.
  • Вы говорите, что GUID равен 32 символам, поэтому мы можем явно указать это с помощью квантификатора {32}.
...