[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Почему не работает, ведь кажется правильно!
lodas
Здравствуйте уважаемые форумчане. В переменной $content есть ссылка такого вида:
<a href="/CE0208B/IPPO_Q78_7_Android_403_A13_12GHz_Tablet_PC_with_Dual_Camera_WiFi_External_3G_Capacitive_Touch_4GB_Black.html">

Пытаюсь ее найти так:
preg_match("/<a href=\"/\w+/.*\">/", $content, $result);

Выводит ошибку:
Цитата
Warning: preg_match() [function.preg-match]: Unknown modifier '\'

Подскажите почему не работает? Ведь кажется все делаю правильно
Zzepish
Preg_match('<a href="[^"]+"', .....
Так попробуй
inpost
\w - вот ошибка.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
lodas
inpost, что то не могу разобраться... \w- это же один цельный модификатор, а перед ним у меня? подскажите поподробней в чем ошибка, или его нужно как то по по другому употреблять?
Placido
Ошибка из-за неэкранированного слеша.
Цитата
Если необходимо использовать разделитель внутри шаблона, его нужно проэкранировать с помощью обратной косой черты. Если разделитель часто используется в шаблоне, в целях удобочитаемости, лучше выбрать другой разделитель для этого шаблона.

http://php.net/manual/ru/regexp.reference.delimiters.php

Но не это главное, даже если ты их экранируешь, регулярное выражение все равно будет неправильным. Попробуй ответить на вопрос - что такое /\w+/.*
Подумай, зачем тебе каждый из этих символов, тогда легко напишешь правильную регулярку.
lodas
Placido, сделал так:
preg_match_all("/<a href=\"\/CE0\w+\/.*\">/", $content, $result);

теперь правильно?
Цитата
даже если ты их экранируешь, регулярное выражение все равно будет неправильным

проэкранировал все слеши, вроде работает.. но не могу понять ваш намек, что там еще неправильно?
Placido
Все правильно, просто я думал, что нужно выбрать всю ссылку, вне зависимости от ее содержания.
И еще, если в качестве разделителей в регулярке вместо слешей использовать что-то другое, например, ~, то слеши не нужно будет экранировать, а если вместо кавычек регулярку заключить в апострофы, то не нужно будет экранировать и кавычки:
preg_match_all('~<a href="/CE0\w+/.*">~', $content, $result);
lodas
Круто! Спасибо Placido)))
lodas
А как мне вытянуть название товара(товары все абсолютно разные) без тегов html?
Сейчас меня получается так:
Цитата
<a href="/CE0225X/Nextway_E7_7_Android_404_A13_12GHz_Tablet_PC_with_WiFi_External_3G_Capacitive_Touch_8GB_White__Black.html">

А мне оттуда нужно получить только:
Цитата
Nextway_E7_7_Android_404_A13_12GHz_Tablet_PC_with_WiFi_External_3G_Capacitive_Touch_8GB_White__Black.html
Placido
Нужную часть регулярки заключи в круглые скобки. Почитай о подмасках в регулярных выражениях:
http://php.net/manual/ru/regexp.reference.subpatterns.php
Потом через preg_match($result) смотри, что у тебя какой подмаской найдено.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.