Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: НЕ трогать изображения
 
 автор: Deed   (27.03.2011 в 14:00)   письмо автору
 
 

Ломаю голову...

<?php
$text
=<<< DEED
В субботу же в Аммане прошла демонстрация сторонников исламистской оппозиции, левых группировок и профсоюзов, требовавших отставки премьер-министра Мааруфа Бакхита и проведения политических реформ.

Волна протестов на Ближнем Востоке
http://korrespondent.net/world/1200509-v-stolice-iordanii-proshli-novye-akcii-protestov
Бакхита протестующие считают ответственным за насилие в Аммане, где в пятницу при столкновениях демонстрантов с полицией погиб один человек и еще 160 - были ранены, как манифестанты, так и полицейские.
<span style="color:#9F9D98">Deed:</span> <br /><br /><img src="http://www.premier.gov.ru/media/2009/5/8/12650/doc_photo.jpeg" width="395" height="273" /><br />
http://bodybuilder2007.ru/wp-content/uploads/2009/07/%D0%A4%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B8-028.jpg Экс-посол США в ООН, бывший заместитель госсекретаря по контролю над вооружениями Джон Болтон заявил, что президент США Барак Обама не обладает достаточной компетенцией, чтобы руководить страной.

Как заявил политик, выступая на конференции консервативных республиканцев в американском штате Айова, нынешний глава государства не уделяет достаточно внимания вопросам национальной безопасности.
DEED;

//Нужно забрать на обработку все ссылки, НЕ ЗАКАНЧИВАЮЩИЕСЯ НА (\.jpg|\.jpeg|\.gif|\.png|\.bmp|\.pdf|\.tif), и не имеющие перед собой \" кавычек.

preg_match_all("/(?<!\")http[^\s]*(?!\.jpg)/is",$text,$out); //В этой регулярке работает только отрицательное назад смотрящее (?<!\")

?>


Спасибо.

  Ответить  
 
 автор: cheops   (27.03.2011 в 14:24)   письмо автору
 
   для: Deed   (27.03.2011 в 14:00)
 

Так не сработает, дело в том, что \.jpg уже входит в [^\s]*, поэтому проверка будет всегда истинной, после [^\s]* может идти только пробельный символ. Может выбрать все ссылки, а потом уже просеять полученный массив? Или это регулярное выражение готовится для замены (тогда может лучше воспользоваться preg_replace_callback())?

  Ответить  
 
 автор: Deed   (27.03.2011 в 14:33)   письмо автору
 
   для: cheops   (27.03.2011 в 14:24)
 

Спасибо большое, уважаемый cheops!
Однако я, к стыду своему, ни разу не пользовался preg_replace_callback()). Сейчас читаю мануал, и что-то со скрипом усваивается...

  Ответить  
 
 автор: cheops   (27.03.2011 в 15:02)   письмо автору
 
   для: Deed   (27.03.2011 в 14:33)
 

На самом деле очень удобная шутка, в вашем случае заготовка для её вызова будет выглядеть так
<?php
$text
=<<< DEED
В субботу же в Аммане прошла демонстрация сторонников исламистской оппозиции,
левых группировок и профсоюзов, требовавших отставки премьер-министра Мааруфа Бакхита и проведения политических реформ. 

Волна протестов на Ближнем Востоке 
http://korrespondent.net/world/1200509-v-stolice-iordanii-proshli-novye-akcii-protestov 
Бакхита протестующие считают ответственным за насилие в Аммане, где в пятницу
при столкновениях демонстрантов с полицией погиб один человек и еще 160 - были ранены, как манифестанты, так и полицейские. 
<span style="color:#9F9D98">Deed:</span> <br /><br /><img src="http://www.premier.gov.ru/media/2009/5/8/12650/doc_photo.jpeg" width="395" height="273" /><br /> 
http://bodybuilder2007.ru/wp-content/uploads/2009/07/%D0%A4%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B8-028.jpg 
Экс-посол США в ООН, бывший заместитель госсекретаря по контролю над вооружениями Джон Болтон заявил, что 
президент США Барак Обама не обладает достаточной компетенцией, чтобы руководить страной. 

Как заявил политик, выступая на конференции консервативных республиканцев в американском штате Айова, 
нынешний глава государства не уделяет достаточно внимания вопросам национальной безопасности.
DEED;

//Нужно забрать на обработку все ссылки, НЕ ЗАКАНЧИВАЮЩИЕСЯ НА (\.jpg|\.jpeg|\.gif|\.png|\.bmp|\.pdf|\.tif), 
// и не имеющие перед собой \" кавычек. 

$text preg_replace_callback("/(?<!\")http[^\s]*/is""replace"$text);

function 
replace($out
{
  return 
$out[0];
}
?>
$out[0] в функции replace - это то, что обнаружило регулярное выражение, в место него подставится то, что вы вернете. Внутри функции replace() вы можете использовать любые проверки, хоть обычными функциями, хоть регулярными выражениями. Если ничего не хотите менять, возвращайте $out[0], если хотите что изменить возвращайте просто новое значение.

  Ответить  
 
 автор: Deed   (27.03.2011 в 16:55)   письмо автору
 
   для: cheops   (27.03.2011 в 15:02)
 

Понемногу вникаю. Спасибо большущее! :)
Надеюсь, если возникнут вопросы, задать их будет можно?

  Ответить  
 
 автор: cheops   (27.03.2011 в 16:59)   письмо автору
 
   для: Deed   (27.03.2011 в 16:55)
 

Конечно, вопросы только приветствуются.

  Ответить  
 
 автор: Deed   (27.03.2011 в 18:52)   письмо автору
 
   для: cheops   (27.03.2011 в 16:59)
 

Вопросы... Их есть у меня.

<?


$answer1
=<<<DEED
eed: <br /><br /><img src="http://health.cleeck.com/pictures/alco.jpg" height="250" width="190" alt="image" /><br /><br /><br /><br /><img src="http://i.imgur.com/KMs6b.jpg" height="375" width="500" alt="image" /><br /><br />Очень плохо, что женщины у нас зачастую востребованы в таких сферах, которые низкооплачиваемы и не требуют особых интеллектуальных затрат. <br />http://imgur.com/KMs6b Это, конечно, унижает женщин и формально тоже делает их невостребованными.<br />http://phpprogs.ru/article/cycle_for_foreach Но вопрос этот довольно скользкий. Движение должно быть со всех сторон. Со стороны государства оно есть, со стороны женщины оно тоже должно быть.
http://www.softtime.ru/forum/addpost.php?id_forum=6&id_theme=79786&id_post=475532Это движение, прежде всего, к получению своего полноценного образования. <br /><br /><img src="http://img1.liveinternet.ru/images/attach/b/3/7/866/7866438_276bb.jpg" height="367" width="500" alt="image" /><br />http://forum.presviter.com/index.php?topic=1374.0;wap2

DEED;


$num_links=preg_match_all("/(?<!\")(((f|ht){1}tp(|s):\/\/)[-a-zA-Z0-9@:%_\+.;~#?&\/\/=]+)/i",$answer1,$link_out);
if(
$num_links>0){
    for(
$i=0;$i<$num_links;$i++){
        
$click1=parse_url($link_out[0][$i]);
        
$click=$click1['host'];
        
$link=$link_out[0][$i];
        
$search[]=$link;
        
$replace[]="<a href=\"http://www.pentagon.gov/out.php?link=$link\" target=\"_blank\">$click</a>";
        
    }
    
    
$answer2=str_replace($search,$replace,$answer1);
    
    
}


?>


И я был бы благодарен, если бы Вы показали мне как эту махину запихнуть в изящный callback

  Ответить  
 
 автор: cheops   (27.03.2011 в 19:04)   письмо автору
 
   для: Deed   (27.03.2011 в 18:52)
 

Я бы поступил как-то вот так
<?php
$answer1
=<<<DEED
eed: <br /><br /><img src="http://health.cleeck.com/pictures/alco.jpg" height="250" width="190"
alt="image" /><br /><br /><br /><br /><img src="http://i.imgur.com/KMs6b.jpg" height="375" 
width="500" alt="image" /><br /><br />Очень плохо, что женщины у нас зачастую востребованы в 
таких сферах, которые низкооплачиваемы и не требуют особых интеллектуальных затрат. 
<br />http://imgur.com/KMs6b Это, конечно, унижает женщин и формально тоже делает их 
невостребованными.<br />http://phpprogs.ru/article/cycle_for_foreach Но вопрос этот довольно 
скользкий. Движение должно быть со всех сторон. Со стороны государства оно есть, со стороны 
женщины оно тоже должно быть. 
http://www.softtime.ru/forum/addpost.php?id_forum=6&id_theme=79786&id_post=475532Это движение, 
прежде всего, к получению своего полноценного образования. 
<br /><br /><img src="http://img1.liveinternet.ru/images/attach/b/3/7/866/7866438_276bb.jpg" 
height="367" width="500" alt="image" /><br />http://forum.presviter.com/index.php?topic=1374.0;wap2 

DEED;

$pattern "/(?<!\")(((f|ht){1}tp(|s):\/\/)[-a-zA-Z0-9@:%_\+.;~#?&\/\/=]+)/i";
$answer1 preg_replace_callback($pattern"replace"$answer1);
echo 
$answer1;

function 
replace($link_out)
{
  
$click parse_url($link_out[0]);
  return 
"<a href=\"http://www.pentagon.gov/out.php?link={$link_out[0]}\" target=\"_blank\">{$click['host']}</a>"
}
?>

  Ответить  
 
 автор: Deed   (27.03.2011 в 19:41)   письмо автору
 
   для: cheops   (27.03.2011 в 19:04)
 

Вот это да!!! Аж не верится, что это работает :)
Но у меня нет сил с налету разобраться в этом callback'e
Распечатаю, завалюсь на диван, и уже тогда попытаюсь понять его механизм. Спасибо колоссальное, cheops!!!

Можно еще вопрос? У меня непонятная ошибка. К регэкспам она, вероятно, отношения не имеет, но искать соотвтествующую ветку форума и звать туда Вас, как-то что-то не то... Можно вопрос?

  Ответить  
 
 автор: cheops   (27.03.2011 в 19:49)   письмо автору
 
   для: Deed   (27.03.2011 в 19:41)
 

Конечно, но лучше в отдельной теме.

PS Вообще искать ветки форума и поднимать их не стоит, если есть вопрос, смело заводите новую тему или даже сразу несколько (если это уже обсуждалось и кто-то помнит удачное решение - ссылку обязательно приведут). Те кто это уже обсуждал, найдут её гораздо быстрее - обычно за ними и закреплена обязанность помещать ссылки (если им кажется, что новое обсуждение ничего нового не привносит). Просто в гигантской теме, в которой обсуждается несколько вопросов, потом искать что-то сложнее, да и ссылаться на неё не удобно, нужно точный пост с решением указывать.

  Ответить  
 
 автор: Deed   (27.03.2011 в 20:05)   письмо автору
 
   для: cheops   (27.03.2011 в 19:49)
 

Хорошо. Щас соберусь с мыслями.

  Ответить  
 
 автор: Deed   (27.03.2011 в 22:18)   письмо автору
 
   для: cheops   (27.03.2011 в 19:49)
 

Не могли бы глянуть: http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=79797&page=1?

  Ответить  
 
 автор: cheops   (28.03.2011 в 16:42)   письмо автору
 
   для: Deed   (27.03.2011 в 22:18)
 

Ответил.

PS Вы не беспокойтесь, я все темы просматриваю :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования