Главное меню:



Satus — это простая CMS
Комментарии:
    25.12.11 18:13 Написал(а) Селиван (из города Северное)
Хороший блог, однако стоит больше добавлять информации
читать статью »
    10.12.11 16:52 Написал(а) Вася (из города Белгород)
хА. приколько
читать статью »
    29.11.11 13:35 Написал(а) Марианна (из города Кулебаки)
Есть моменты, когда все удается, не ужасайтесь - это пройдет.
читать статью »
    09.11.11 19:12 Написал(а) Капитон (из города Кадуй)
Да, действительно. Так бывает. Можем пообщаться на эту тему.
читать статью »

 
Используя regexp'ы

А теперь перейдем к жизненным примерам использования регулярных выражений, то что может непосредственно пригодится при разработке веб-приложений..

 

 

1. Разбивка файла на строки..

Суть задачи думаю ясна.. тут можно воспользоваться встроеной функцией file(...) или же, прочитав все данные в строку, воспользоваться explode("\n", ...)..

Да, можно... вот только file(...) возвращает массив строк, сохраняя в конце строк переход на другую строку (\n или \r\n).. а использование explode("\n", ...) немногим лучше, так как если в файле разделитель строк в стиле dos (\r\n), то в конце разбитых строк остается символ \r.. к тому же оба эти способа для пустых строк возвратят такие же пустые элементы массива -- а оно нам нужно?

 

Как же быть?.. все просто.. читаем содержимое файла в буфер и разбиваем на части, используя регулярное выражение..

$A = file_get_contents(имя_файла);

$R = preg_split("/\r?\n/", $A, -1, PREG_SPLIT_NO_EMPTY);

Данный метод разбивает файл на строки как по символу \n (unix формат), так и по \r\n (dos формат)... пустые строки при этом игнорируются..

 

В принципе можно немного видоизменить паттерн, чтобы разбивка шла и по символу \r (mac os формат):

$A = file_get_contents(имя_файла);

$R = preg_split("/[\r\n]+/", $A, -1, PREG_SPLIT_NO_EMPTY);

 

 

2. Удаление лишних пробелов из строки..

Суть задачи состоит в том, чтобы заменить несколько подряд идущих пробелов в строке одним пробелом..

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

 

Куда проще воспользоваться регулярным выражением:

$R = preg_replace("/\s+/", " ", $A);

все подряд идущие пробелы, табуляции, переходы на другую строку заменяются на один пробел..

 

 

3. Удаление html-тегов из текста или потока ввода..

А вот эта на первый взгляд простая задача может породить регулярные выражения длиной с пол-страницы.. :-)

Решений задачи множество.. каждое из них верно только в определенных условиях..

 

Самое простое решение, это удаление от <  до >:

$R = preg_replace("/<\/?[a-z][\w\-\.:]*[^>]*>/", "", $A);

 

В чем подводные камни, спросите вы? в том что:

— контент внутри тегов <head></head>, <style></style>, <script></script> совсем нам не нужен, а при использовании вышеописанного выражения он будет сохранен..

— контент внутри таблиц <table></table>  при простом удалении тегов сольется воедино, что не совсем хотелось бы..

— не обрабатываются специальные теги xml, такие как: prolog, doctype, entity, element, attlist, notation, processing instructions, cdata.. конечно, если вы не разбираете xml документы обработка этих тегов совсем не нужна, ну а вдруг?..

Комментариев к статье: 3..
    26.10.11 17:07 Написал(а) Мир (из города Светлый)

И я с этим столкнулся. Можем пообщаться на эту тему. Здесь или в PM.

    28.05.11 05:10 Написал(а) darkslave

можно и strip_tags удалять.. НО на "невалидных" тегах типа <a href="http://site.ru/>">111</a> обработчик ведет себя не так как хотелось бы...
тут конечно встает вопрос, а нужно ли учитывать такие битые теги?..

    17.04.11 16:23 Написал(а) Антон

Теги можно и <a href="http://www.php.su/functions/?strip_tags">strip_tags</a> удалять.

[ Добавить ] комментарий
Поля с пометкой * обязательны для заполнения

*Ваше имя
  Ваш сайт  
  Ваш город
*Ваше сообщение

Код подтверждения
*Код с картинки   @
код на картинке содержит только цифры (0..9) и буквы англ. алфавита (A..Z)