|
|
|
| Ломаю голову...
<?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); //В этой регулярке работает только отрицательное назад смотрящее (?<!\")
?>
|
Спасибо. | |
|
|
|
|
|
|
|
для: Deed
(27.03.2011 в 14:00)
| | Так не сработает, дело в том, что \.jpg уже входит в [^\s]*, поэтому проверка будет всегда истинной, после [^\s]* может идти только пробельный символ. Может выбрать все ссылки, а потом уже просеять полученный массив? Или это регулярное выражение готовится для замены (тогда может лучше воспользоваться preg_replace_callback())? | |
|
|
|
|
|
|
|
для: cheops
(27.03.2011 в 14:24)
| | Спасибо большое, уважаемый cheops!
Однако я, к стыду своему, ни разу не пользовался preg_replace_callback()). Сейчас читаю мануал, и что-то со скрипом усваивается... | |
|
|
|
|
|
|
|
для: 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], если хотите что изменить возвращайте просто новое значение. | |
|
|
|
|
|
|
|
для: cheops
(27.03.2011 в 15:02)
| | Понемногу вникаю. Спасибо большущее! :)
Надеюсь, если возникнут вопросы, задать их будет можно? | |
|
|
|
|
|
|
|
для: Deed
(27.03.2011 в 16:55)
| | Конечно, вопросы только приветствуются. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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>";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(27.03.2011 в 19:04)
| | Вот это да!!! Аж не верится, что это работает :)
Но у меня нет сил с налету разобраться в этом callback'e
Распечатаю, завалюсь на диван, и уже тогда попытаюсь понять его механизм. Спасибо колоссальное, cheops!!!
Можно еще вопрос? У меня непонятная ошибка. К регэкспам она, вероятно, отношения не имеет, но искать соотвтествующую ветку форума и звать туда Вас, как-то что-то не то... Можно вопрос? | |
|
|
|
|
|
|
|
для: Deed
(27.03.2011 в 19:41)
| | Конечно, но лучше в отдельной теме.
PS Вообще искать ветки форума и поднимать их не стоит, если есть вопрос, смело заводите новую тему или даже сразу несколько (если это уже обсуждалось и кто-то помнит удачное решение - ссылку обязательно приведут). Те кто это уже обсуждал, найдут её гораздо быстрее - обычно за ними и закреплена обязанность помещать ссылки (если им кажется, что новое обсуждение ничего нового не привносит). Просто в гигантской теме, в которой обсуждается несколько вопросов, потом искать что-то сложнее, да и ссылаться на неё не удобно, нужно точный пост с решением указывать. | |
|
|
|
|
|
|
|
для: cheops
(27.03.2011 в 19:49)
| | Хорошо. Щас соберусь с мыслями. | |
|
|
|
|
|
|
|
|
для: Deed
(27.03.2011 в 22:18)
| | Ответил.
PS Вы не беспокойтесь, я все темы просматриваю :) | |
|
|
|