Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2016, 13:04   #1
WennY
Форумчанин
 
Регистрация: 17.01.2008
Сообщений: 236
Радость [Регулярка] поиск ближайшего вхождения назад

Доброго времени суток. Есть набор ссылок:
Код:
http://ololo.com http://site.com/1.pdf http://trololo.com
Задача: обнаружить признаки pdf-файла, затем захватить все, начиная с первого же http:// назад, на выходе имея полный урл ссылки на pdf. Такая реализация видится мне самой простой и надежной, поскольку исключает извращения с (^|\s) и т.п. Если у кого-то есть иные идеи, то просьба не подгонять регулярки под конкретный пример (ибо реализаций входной строки может быть масса и учитывать их все ни у меня, ни, полагаю, у вас нет ровно никакого настроения), а постараться уложиться в предложенною мной концепцию. Моя кривая попытка:
PHP код:
preg_replace(
    
'/((?<=http:\/\/)).*?\.pdf/',
    
'<a href="$1"><img src="http://findicons.com/files/icons/1637/file_icons_vs_2/48/pdf.png"></a>',
    
'http://ololo.com http://site.com/1.pdf http://trololo.com'
); 
Цепляет самый первый http:// от начала, хотя "просят" - первый от вхождения. Признаться, с lookbehind работал за всю жизнь полтора раза, включая этот, потому буду благодарен экспресс-курсу в эту область регулярок. Заранее благодарен.

Последний раз редактировалось WennY; 19.09.2016 в 13:08.
WennY вне форума Ответить с цитированием
Старый 19.09.2016, 16:05   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Можно проще, и без регулярок:
PHP код:
$str 'http://ololo.com http://site.com/1.pdf http://trololo.com';
$ex_str explode(' '$str);
foreach(
$ex_str as $part){
    if(
strpos($part'.pdf') !== FALSE){
        echo 
'<a href="' $part '"><img src="http://findicons.com/files/icons/1637/file_icons_vs_2/48/pdf.png"></a><br/>';
    }

Andkorol вне форума Ответить с цитированием
Старый 19.09.2016, 16:36   #3
WennY
Форумчанин
 
Регистрация: 17.01.2008
Сообщений: 236
По умолчанию

Спасибо за участие, но я не просто так просил не предлагать конкретных реализаций под конкретную строчку. Спасибо.
WennY вне форума Ответить с цитированием
Старый 19.09.2016, 16:41   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,159
По умолчанию

насколько вижу я - тут универсальное решение, строку меняете на какую хотите
и вывод тоже меняете как хотите. Просто без регулярок
ADSoft на форуме Ответить с цитированием
Старый 19.09.2016, 16:49   #5
WennY
Форумчанин
 
Регистрация: 17.01.2008
Сообщений: 236
По умолчанию

Просто содомия это все какая-то - дробить слова и выцеживать через поиски при живых регулярках. Неуж-то нереально?

Последний раз редактировалось WennY; 19.09.2016 в 16:52.
WennY вне форума Ответить с цитированием
Старый 19.09.2016, 17:05   #6
WennY
Форумчанин
 
Регистрация: 17.01.2008
Сообщений: 236
По умолчанию

Короче, сделал так:
PHP код:
echo preg_replace(
    
'/(.*)(http:\/\/.*?\.pdf)/',
    
'$1<a href="$2"><img src="http://findicons.com/files/icons/1637/file_icons_vs_2/48/pdf.png"></a>',
    
'http://ololo.com http://site.com/1.pdf http://trololo.com'
); 
Однако же, вопрос запила посредством lookbehind все же остается в силе.. из любви к искусству, так сказать.
WennY вне форума Ответить с цитированием
Старый 19.09.2016, 17:07   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Не совсем понятен практический смысл этой «концепции» – помимо оборачивания в ссылки URL-адресов PDF-документов она зачем-то оставляет кучу левых URL, ничего с ними не делая, оставляя их в исходной строке.
Вопрос: зачем они там?

И да, regexp-ы для парсинга в PHP – это вообще не панацея, настолько там всё криво и прожорливо реализовано.
Andkorol вне форума Ответить с цитированием
Старый 19.09.2016, 17:14   #8
WennY
Форумчанин
 
Регистрация: 17.01.2008
Сообщений: 236
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
помимо оборачивания в ссылки URL-адресов PDF-документов она зачем-то оставляет кучу левых URL
Не очень понял. А что она ещё должна делать? Единственная ее миссия на этой грешной земле - предавать сухому урлу вид ссылки-иконки.
WennY вне форума Ответить с цитированием
Старый 19.09.2016, 17:20   #9
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от WennY Посмотреть сообщение
Не очень понял. А что она ещё должна делать? Единственная ее миссия на этой грешной земле - предавать сухому урлу вид ссылки-иконки.
Ну а остальные URL, которые к PDF не относятся – на..зачем-то они остаются в строке и выводятся на экран?
Какой тайный смысл в таком вот отображении информации:
Andkorol вне форума Ответить с цитированием
Старый 19.09.2016, 17:23   #10
WennY
Форумчанин
 
Регистрация: 17.01.2008
Сообщений: 236
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
зачем-то они остаются в строке и выводятся на экран?
Это просто пример. Я ведь нигде не утверждал, что все мои полоумные trololo.com вперемешку со ссылками на пдфы будут вывешены в качестве официальных данных на боевых сайтах?
WennY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в базе неполного вхождения Maxjuvefan Общие вопросы Delphi 7 28.08.2015 08:53
Поиск вхождения подстроки в тексте aquatell Общие вопросы Delphi 7 16.04.2011 23:18
поиск ближайшего минимального значения на sql nuevegramodelamor Помощь студентам 7 11.05.2010 20:21
Поиск - дальше, назад в TTreeView RIO Общие вопросы Delphi 10 14.12.2009 00:22