Анимация
JavaScript
|
Главная Библионтека Решение: $fname=ereg Replace( ([[:alnum:]])(\\.[[:alnum:].]*)?$, \\1.out, $fname Обратите внимание на довольно интересную структуру этого выражения: мы не можем просто "привязать" его к концу строки при помощи $, что обусловлено спецификой работы RegEx. Мы также привязываем начало выражения к любой букве или цифре, которой оканчивается имя файла. Имя каталога и файла Цель: разбить полное имя файла $path на имя каталога $dir и и имя файла $fname. Средства: $fname = ereg Replace(".*[\\/]","",$path); $dir = ereg Replace("[\\/]?[-\\/]*$","",$path); Проверка на идентификатор Задача: проверить, является ли строка $id идентификатором, т. е. состоит ли она исключительно из алфавитно-цифровых символов (чтобы сделать задачу более интересной, договоримся также, что первым символом строки не может быть цифра). Решение: if(eregi("[a-z ][[:alnum:]]*",$id)) echo "Это идентификатор!"; Модификация тэгов Задача: в тексте, заданном в $text, у всех тэгов <img> заменить в src расширение файла рисунка на gif, вне зависимости от того, какое расширение было у него до этого и было ли вообще. Решение: $text=eregi Replace( (<img[->]*src=../../../cl/"?[[:alnum:]/\\]*)(\\.[[:alnum:]]*)?, \\1.jpg, $text Преобразование гиперссылок Задача: имеется текст, в котором иногда встречаются подстроки вида протокол : url, где протокол - один из протоколов http, ftp или gopher, а url - какой-нибудь адрес в Интернете. Нужно заместить их на HTML-эквиваленты <a href=></a>. Решение: $w="[:alnum:]"; $p="[:punct:]"; $text=eregi Replace( "((https?ftpgopher): ". протокол "[$w-]+(\\.[$w-]+)*". имя хоста "(/[$w+&.%]*(\\?[$w?+&%]*)?)?". имя файла и параметры ")", <a href="\\1">\\1</a>, $text Преобразование адресов E-mail Задача: имеется текст, в котором иногда встречаются строки вида пользователь@хост, т. е. E-mail-адреса в обгчном формате (или хотя бы большинство таких E-mail). Необходимо преобразовать их в HTML-ссылки. Решение: $text=eregi Replace( ([[:alnum:]-.]+@. пользователь [[:alnum:]-]+(\\.[[:alnum:]-]+)*. домен (\\?([[:alnum:]?+&%]*)?)?. необязательн1е параметры <a href="\\1">\\1</a>, $text Этот пример, хоть и не безупречен, но все же преобразует правильно львиную долю адресов электронной почты. Выделение всех уникальных слов из текста Задача: перед нами некоторый довольно длинный текст в переменной $text. Необходимо выделить из него все слова и оставить из них только уникальные. Результат должен быть представлен в виде списка, отсортированного в алфавитном порядке. Решение этой задачи может потребоваться, например, при написании индексирующей поисковой системы на PHP. Решение: воспользуемся функцией split() и ассоциативным массивом. 1 Листинг 22.1. Отбор уникальных слов Эта функция в1деляет из текста в $text все уникальн1е слова и возвращает их список, отсортированн1Й в алфавитном порядке. function GetUniques($text) { Сначала получаем все слова в тексте $Words=split("[[:punct:][:blank:]]+",$text); $Uniq=array(); список уникальн1х слов $Test=array(); хэш уже обработанн1х слов Проходимся по всем словам в $Words и заносим в $Uniq уникальн1е foreach($Words as $v) { $v=strtolower($v); в нижний регистр Слово уже нам встречалось? Если нет, то занести в $Uniq if(!@$Test[$v]) $Uniq[]=$v; Указать, что это слово уже обрабат1валось $Test[$v]=1; Наконец, сортируем список sort($Uniq); return $Uniq; Данный пример довольно интересен, т. к. он имеет довольно большую функциональность при небольшом объеме. Его "сердце" - функция split() и цикл перебора слов с отбором уникальных. Мы используем алгоритм, основанный на применении ассоциативного массива для отбора уникальных элементов. Как он работает - надеюсь, ясно из комментариев. Теперь мы можем воспользоваться функцией из листинга 22.1, например, в таком контексте: $fname="sometext.txt"; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 [ 102 ] 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |