12 февр. 2013 г.

Регулярные выражения

Мой blogger. Seo оптимизация

tweetn

Регулярные выражения

Cнова понадобилась помощь регулярных выражений и я решила расписать то что я применила подробно, чтобы в следующий раз не начинать все разборки сначала, а просто взять и прочитать.
То бишь пример с описанием.
Надо заменить адрес ссылки   <a href="#">ссылка</a>

Регуляное выражение:
$anonce  = preg_replace("#(https?|ftp)://\S+[^\s.,> )\];'\"!?]#", "ССЫЛКА", $anonce);

$anonce  - это там где заменяем

preg_replace выполняет поиск и замену по регулярному выражению, запишу совсем простодля ламеров preg_replace(1,2,3) В  3, по регулярному выражению 1 ищем и заменяем на 2 (полное описание смотрите в интернете).
Рассмотрим само регулярное выражение:

$anonce  = preg_replace("#(https?|ftp)://\S+[^\s.,> )\];'\"!?]#", "ССЫЛКА", $anonce);
Регулярные выражения,  представляют собой строку,которая  всегда начинается с символа разделителя, за которым следует непосредственно регулярное выражение, и заканчивается разделителем и потом может быть необязятельный список модификаторов. В качестве символа разделителя обычно используется слэш ('/') в нашем случае #

 $anonce  = preg_replace("#(https?|ftp)://\S+[^\s.,> )\];'\"!?]#", "ССЫЛКА", $anonce);
 ( ) - эти знаки в шаблоне обозначают ограничители подшаблона, которые можно создавать и в дальнейшем ссылаться на них
? - этот знак в шаблоне обозначает количество совпадений 0 или 1 раз, 
 | - этот знак в шаблоне обозначает альтернативу, по типу: если этот знак не нашли, значит ищем другой
Т.е у нас возможные варианты http, https и ftp.
 ://  обозначает само себя: ://

$anonce  = preg_replace("#(https?|ftp)://\S+[^\s.,> )\];'\"!?]#", "ССЫЛКА", $anonce);
 \S+  \S означает что сделующий символ не пробел  а  +  в шаблоне обозначает количество совпадений 1 или более раз. К слову \s - любой пробельный символ [\t\ \r\f\n]

[^\s.,> )\];'\"!?]

[ ] - эти знаки в шаблоне обозначают ограничители класса символов
Здесь метасимволами являются два знака '-' знак диапазона символов, и '^' меняет класс на  противоположность.Пример:  [a-z] - только строчные буквы, [^a-z] - все кроме строчных букв. 

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


Вот еще один пример, который решает в общем то ту же задачу:


$anons = preg_replace('/(http:\/\/|www)[^(">)]+/i', "http://google.com", $anons);
echo($anons);
P.S. Для замена текста без регулярных выражений служит : str_replace()

Регулярные выражения. Мне понравилась эта http://omsk777.ru/posix.html страница с описанием и примерами регулярных выражений http://uwblogger.blogspot.com/ Abductor- генератор сайтов от Ласто