15 регулярок, які повинен знати кожен PHP-програміст

  1. 1. Перевірка доменного імені
  2. 2. Підсвічування слова в тексті
  3. 3. Підсвічування результатів пошуку в WordPress-блозі
  4. 4. Отримання всіх картинок з HTML-документа
  5. 5. Видалення повторюваних слів (не чутливий до регістру)
  6. 6. Видалення повторюється пунктуації
  7. 7. Пошук XML / HTML тегів
  8. 8. Пошук XHTML / XML тегів з певним значенням атрибута
  9. 9. Пошук шістнадцятирічних значень квітів
  10. 10. Пошук заголовка статті
  11. 11. Парсинг логів Apache
  12. 12. Заміна подвійних лапок «розумними» лапками
  13. 13. Комплексна перевірка пароля
  14. 14. WordPress: Використання регулярного виразу для отримання картинок із запису
  15. 15. Генерація автозаміни для смайлів
  16. Лаконічна допомогу в укладанні

Регулярні вирази - це добре відомий і дуже корисний інструмент для розробників. З їх допомогою можна зручно знаходити, визначати чи замінювати текст, слова або будь-які інші символи. У сьогоднішньому пості я постарався зібрати 15 найбільш корисних регулярних виразів для PHP-програміста, які також стануть в нагоді будь-якому іншому практикуючому веб-розробнику.

З одного боку я дійсно намагався підібрати найбільш ходові і затребувані в реальному житті приклади, які попередньо були мною грунтовно протестовані, і які можна широко використовувати в тисячі реальних ситуацій. З іншого боку - ці приклади можна використовувати при початковому навчанні регулярними виразами: тут є як зовсім прості, так і досить глибокодумні прийоми, тим більше я вважаю, що вчитися новачкові завжди краще і ефективніше на конкретних практичних прикладах.

Перед тим як приступати до читання, залишається лише додати, що це переклад ось цієї статті від Джан-Баптисти Джунга .

Мимоволі попередження: якщо якийсь нижченаведений лістинг в силу не зовсім вдалою верстки виходить за екран блогу, ви можете просто виділити його повністю і скопіювати в буфер обміну, після чого вставити вже безпосередньо в свій редактор, в якому ви працюєте з кодом.

1. Перевірка доменного імені

Перевіряємо, чи є рядок правильним доменним ім'ям?

$ Url = "http://blogerator.org/"; if (preg_match ( '/ ^ (http | https | ftp): // ([A-Z0-9] [A-Z0-9_-] * (?:. [A-Z0-9] [A-Z0- 9 _-] *) +):? (d +)? /? / i ', $ url)) {echo "Your url is ok."; } Else {echo "Wrong url."; }

2. Підсвічування слова в тексті

Це дуже корисне регулярний вираз, з його допомогою ви можете знайти потрібне слово і підсвітити його. Особливо корисно для відображення результатів пошуку.

$ Text = "Sample sentence from BLOGERATOR.RU, regex has become popular in web programming. Now we learn regex. According to wikipedia, Regular expressions (abbreviated as regex or regexp, with plural forms regexes, regexps, or regexen) are written in a formal language that can be interpreted by a regular expression processor "; $ Text = preg_replace ( "/ b (regex) b / i", '<span style = "background: # 5fc9f6"> 1 </ span>', $ text); echo $ text;

3. Підсвічування результатів пошуку в WordPress-блозі

Як вже говорилося в попередньому прикладі, цей приклад коду, зручно використовувати у видачі пошукових результатів і є відмінний спосіб впровадити цю функцію в Wordpress-блог.

Відкрийте ваш файл search.php, і знайдіть функцію the_title (). Замініть її наступним кодом:

echo $ title;

Тепер, вище цього рядка, додайте цей код:

<? Php $ title = get_the_title (); $ Keys = explode ( "", $ s); $ Title = preg_replace ( '/ ('. Implode ( '|', $ keys). ') / Iu', '<strong class = "search-excerpt"> \ 0 </ strong>', $ title); ?>

Збережіть файл search.php, і відкрийте style.css. Додайте туди наступний рядок:

strong.search-excerpt {background: yellow; }

4. Отримання всіх картинок з HTML-документа

Якщо вам коли-небудь було потрібно отримати всі картинки з веб-сторінки, цей код повинен бути ви легко зможете створити завантажувач зображень за допомогою можливостей cURL:

$ Images = array (); preg_match_all ( '/ (img | src) = ( "| \') [^" \ '>] + / i', $ data, $ media); unset ($ data); $ Data = preg_replace ( '/ (img | src) ( "| \' | =" | = \ ') (. *) / I', "$ 3", $ media [0]); foreach ($ data as $ url) {$ info = pathinfo ($ url); if (isset ($ info [ 'extension'])) {if (($ info [ 'extension'] == 'jpg') || ($ info [ 'extension'] == 'jpeg') || ($ info [ 'extension'] == 'gif') || ($ info [ 'extension'] == 'png')) array_push ($ images, $ url); }}

5. Видалення повторюваних слів (не чутливий до регістру)

Під час друкування, часто повторюються слова? Допоможе ось це регулярний вираз.

$ Text = preg_replace ( "/ s (w + s) 1 / i", "$ 1", $ text);

6. Видалення повторюється пунктуації

Те ж саме, тільки для пунктуації. Попрощайтеся з подвійними запитом.

$ Text = preg_replace ( "/.+/ i", ".", $ Text);

7. Пошук XML / HTML тегів

Ця проста функція, приймає два аргументи. Перший - це тег, який вам потрібно знайти, і другий - це змінна, яка містить XML або HTML. Повторюся, цю функцію дуже зручно використовувати разом з cURL.

function get_tag ($ tag, $ xml) {$ tag = preg_quote ($ tag); preg_match_all ( '{<'. $ tag. '[^>] *> (. *?) </'.$ tag.'>. '}', $ xml, $ matches, PREG_PATTERN_ORDER); return $ matches [1]; }

8. Пошук XHTML / XML тегів з певним значенням атрибута

Ця функція дуже схожа на попередню, за винятком того, що ви можете задати тегу потрібний атрибут. Наприклад, ви легко зможете знайти.

function get_tag ($ attr, $ value, $ xml, $ tag = null) {if (is_null ($ tag)) $ tag = '\ w +'; else $ tag = preg_quote ($ tag); $ Attr = preg_quote ($ attr); $ Value = preg_quote ($ value); $ Tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*". "([ '\"]) $ Value \\ 2 [^>] *> (. *?) <\ / \\ 1> / "preg_match_all ($ tag_regex, $ xml, $ matches, PREG_PATTERN_ORDER); return $ matches [3];}

9. Пошук шістнадцятирічних значень квітів

Ще один корисний інструмент для веб-розробника! Він дозволяє вам знаходити / перевіряти шістнадцятиричні значення кольору.

$ String = "# 555555"; if (preg_match ( '/ ^ # (?: (?: [a-fd] {3}) {1,2}) $ / i', $ string)) {echo "example 6 successful."; }

10. Пошук заголовка статті

Цей фрагмент коду знайде і виведе на екран текст, що знаходиться всередині тегів, на html-сторінці.

$ Fp = fopеn ( "http://www.blogerator.ru/", "r"); whilе (! fеof ($ fp)) {$ page. = fgеts ($ fp, 4096); } $ Titre = erеgi ( "<title> (. *) </ Title>", $ page, $ regs); echo $ regs [1]; fclosе ($ fp);

11. Парсинг логів Apache

Більшість сайтів запущено на всім відомому веб-сервері Apache. Якщо ваш сайт знаходиться в їх числі, чому б не використати PHP і регулярні вирази для розбору логів Апача?

// Logs: Apache web server // Successful hits to HTML files only. Useful for counting the number of page views. '^ ((? # Client IP or domain name) S +) s + ((? # Basic authentication) S + s + S +) s + [((? # Date and time) [^]] +)] s + "(?: GET | POST | HEAD) ((? #file) / [^? &quot;] + ?. html?) ?? ((? # parameters) [^?&quot;] +)? HTTP / [0-9.] + " s + (? # status code) 200s + ((? # bytes transferred) [- 0-9] +) s + "((? # referrer) [^"] *) "s +" ((? # user agent) [^ " ] *) "$ '// Logs: Apache web server // 404 errors only' ^ ((? # client IP or domain name) S +) s + ((? # basic authentication) S + s + S +) s + [(( ? #date and time) [^]] +)] s + "(?: GET | POST | HEAD) ((? #file) [^?"] +) ?? ((? # parameters) [^? &quot;] +)? HTTP / [0-9.] + "s + (? # status code) 404s + ((? # bytes transferred) [- 0-9] +) s +" ((? # referrer) [^ "] *) "s +" ((? # user agent) [^ "] *)" $ '

12. Заміна подвійних лапок «розумними» лапками

Якщо ви любитель типографіки, вам сподобається це регулярний вираз, що заміняє звичайні подвійні лапки, на «розумні лапки». Схоже регулярний вираз використовується в Wordpress в контенті сторінки.

preg_replace ( 'B "b ([^" x84x93x94rn] +) b "B', '? 1?', $ text);

13. Комплексна перевірка пароля

Це регулярний вираз буде стежити за тим, щоб в текстове поле було введено не менше шести символів, цифри, дефіси та підкреслення.

Текстове поле повинно містити як мінімум один символ верхнього регістру, один нижнього регістра і одну цифру.

'A (? = [-_ a-zA-Z0-9] *? [AZ]) (? = [-_ a-zA-Z0-9] *? [Az]) (? = [-_ a-zA-Z0 -9] *? [0-9]) [-_ a-zA-Z0-9] {6} z '

14. WordPress: Використання регулярного виразу для отримання картинок із запису

Оскільки багато з вас є користувачами WordPress, вам можливо знадобиться код, який дозволяє отримати всі картинки, з тексту статті, і вивести їх.

Для того, щоб використовувати цей код, просто вставте його в будь-який файл вашої теми.

<? Php if (have_posts ()):?> <? Php while (have_posts ()): the_post (); ?> <? Php $ szPostContent = $ post-> post_content; $ SzSearchPattern = '~ <img [^>] * /> ~'; // Run preg_match_all to grab all the images and save the results in $ aPics preg_match_all ($ szSearchPattern, $ szPostContent, $ aPics); // Check to see if we have at least 1 image $ iNumberOfPics = count ($ aPics [0]); if ($ iNumberOfPics> 0) {// Now here you would do whatever you need to do with the images // For this example the images are just displayed for ($ i = 0; $ i <$ iNumberOfPics; $ i ++) { echo $ aPics [0] [$ i]; }; }; endwhile; endif; ?>

15. Генерація автозаміни для смайлів

Інша функція, яка використовується в Wordpress - дозволяє автоматично замінювати традиційні строкові символи «:-)» на картинку «смайла».

$ Texte = 'A text with a smiley :-)'; echo str_replace ( ': -)', '<img src = "smileys / souriant.png">', $ texte);

Лаконічна допомогу в укладанні

можу порекомендувати цю шпаргалку (PDF) в якості підручного і короткого довідника, а також цей PHP Regex FAQ для відповіді на часто зустрічаються питання по цій темі.

PS Для розробки великих веб-сайтів одних регулярок знати мало, серйозна розробка вимагає більш широкого кругозору і володіння серйозними CMS. Найближчим часом ми розглянемо створення сайтів на Bitrix , І зробимо ми це на двох типових прикладах. Це, по-перше, створення сайту-візитки, і, по-друге, - швидке розгортання інтернет-магазину на базі движка Бітрікс.

Org/"; if (preg_match ( '/ ^ (http | https | ftp): // ([A-Z0-9] [A-Z0-9_-] * (?:. [A-Z0-9] [A-Z0- 9 _-] *) +):?
D +)?
Iu', '<strong class = "search-excerpt"> \ 0 </ strong>', $ title); ?
Якщо ваш сайт знаходиться в їх числі, чому б не використати PHP і регулярні вирази для розбору логів Апача?
Client IP or domain name) S +) s + ((? # Basic authentication) S + s + S +) s + [((? # Date and time) [^]] +)] s + "(?: GET | POST | HEAD) ((? #file) / [^?
Quot;] + ?
Html?
Parameters) [^?
Quot;] +)?