Інтернет Windows Android

Preg replace php приклади. Регулярні вирази в PHP з прикладами

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

  • PREG_PATTERN_ORDER;
  • PREG_SET_ORDER.

Сортування за першим варіантом групує результати пошуку по номеру регулярного виразу (значення за замовчуванням). У другому випадку результати групуються за місцем їх знаходження в рядку.

Символ - елемент шаблону

Важливо пам'ятати, що шаблон оперує символами. Програмування вже давно забуло, що таке тип даних "символ". Сучасні мови не опускаються нижче поняття "рядок", але по відношенню до шаблону треба розуміти: тут маніпулюють символами.

Побудова шаблону - це, перш за все, вказівка \u200b\u200bпотрібної послідовності символів. Якщо це чітко засвоїти, то помилок в шаблоні не буде. У всякому разі, буде набагато менше.

  • а - це конкретний елемент шаблону - символ.
  • a-z - це елемент шаблону, теж один символ, але тільки зі значенням від a до z - вся латиниця в нижньому регістрі.
  • 0-9 - це одна цифра, причому будь-яка, а ось 1-3 - тільки 1, 2 або 3.

Регістр в шаблоні важливий. Перший і останній символи шаблону мають велике значення. Можна вказати, з чого починається шаблон і чим закінчується.

шаблон функції

PHP preg match all використовує стандартний синтаксис регулярних виразів. позначають один із символів, який в них вказано:

  • тільки символи a, b, c.
  • [^ ABC] все, крім символів A, B, C.
  • \\ W і \\ W - текстовий або НЕ текстовий символ.
  • \\ S і \\ S - пробільний або НЕ символ пробілу.
  • \\ D і \\ D - цифра або не цифри.

Символи повторення позначаються фігурними дужками - (n, m) і відносяться до попереднього символу.

  • n позначає повторення "не менше";
  • m - повторення "не більше".

Синтаксис передбачає безліч варіантів для створення шаблонів, але краще всього починати з азів, тобто з простих, власноруч написаних, в яких складні елементи і комбінації відсутні.

Простіше кажучи, перерахувавши реальні символи, які потрібні, вказавши їх потрібні кількості і врахувавши, що символ "^" відповідає початку, а "$" - кінця рядка, можна створювати простенькі шаблони. Аналізуючи реальні налагоджені регулярні вирази від кваліфікованих фахівців, можна знайти міцні знання для створення складних застосувань preg match all. Арсенал PHP не обмежений тільки цими двома функціями, але вони найчастіше використовуються.

проста практика

Шаблон для цілого числа:

  • "/*/"

Теж шаблон цілого числа, але попереду може бути знак ( "+", "-"), і спереду / ззаду можуть бути зайві прогалини:

  • / ^ [\\ S | \\ + | \\ -] (0,1) * /

аналогічно:

  • /^[\\s|\\+|\\-](0,1)*(\\.)*/ - число з крапкою.
  • /[Email protected]+ \\. (2,3) / - варіант для розпізнавання e-mail.

Застосування власних шаблонів для preg match all, приклади їх в інтернеті, аналіз коду сторінок сайтів і інші джерела дозволяють сформувати власну бібліотеку шаблонів.

Варіантів для пошуку інформації може бути безліч. Зокрема, наведені останні дві конструкції можна змоделювати інакше. У багатьох випадках перевагу матиме той шаблон, який швидше і точніше забезпечить потрібне збіг. Застосування на PHP preg match all, як і аналогічних функцій на інших мовах, вимагає практики, уваги і попередньої перевірки правильності шаблонів.

У даній статті надано добірка php regexp прикладів. Дуже хороша і корисна колекція прикладів регулярних виразів (regular expressions). Всі приклади регулярних виразів прийнятні для PHP. Користуйтеся на здоров'я!

Приклад перевірки доменного імені

Даний, php сниппет перевіряє, чи є рядок допустимим доменним ім'ям.

?:. *) +):? (D +)? /? / I ", $ url)) (echo" Your url is ok. ";) Else (echo" Wrong url. ";)

Приклад підсвічування слова в тексті

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

$ Text \u003d "Sample sentence from KomunitasWeb, 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 \u003d preg_replace ( "/ b (regex) b / i", " 1", $ Text); echo $ text;

Приклад реалізації підсвічування результатів пошуку уWordPress

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

Echo $ title;

А тепер, перед заміненої рядком вставте цей код:

\0", $ Title);?\u003e

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

Strong.search-excerpt (background: yellow;)

Приклад отримання зображень зHTML методом regexp

Даний шматок php коду використовує регулярні вирази, шукає все зображення і адреса url до них.

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

Видалення повторюваних слів (без урахування регістру)

Часто зустрічаються слова, які повторюються? Тоді приклад цього регулярного виразу буде вам корисним.

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

Видалення повторюваних точок

Те ж саме, тільки з повторюваними точками.

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

Відповідність XML / HTML тегів

Ця проста функція приймає два аргументи: тег (відповідності з яким ви хочете знайти), xmlілі html код.

Function get_tag ($ tag, $ xml) ($ tag \u003d preg_quote ($ tag); preg_match_all ( "(<".$tag."[^>]*>(.*?). ")", $ Xml, $ matches, PREG_PATTERN_ORDER); return $ matches; )

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

Цей приклад схожий на попередню функцію, тільки ви можете значно розширити пошук наприклад знайти

.

Function get_tag ($ attr, $ value, $ xml, $ tag \u003d null) (if (is_null ($ tag)) $ tag \u003d "\\ w +"; else $ tag \u003d preg_quote ($ tag); $ attr \u003d preg_quote ($ attr); $ value \u003d preg_quote ($ value); $ tag_regex \u003d "/<(".$tag.")[^>] * $ Attr \\ s * \u003d \\ s * "." ([ "\\"]) $ Value \\\\ 2 [^\u003e] *\u003e (. *?)<\/\\1>/ "Preg_match_all ($ tag_regex, $ xml, $ matches, PREG_PATTERN_ORDER); return $ matches;)

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

Відмінний приклад регулярного виразу, який шукає відповідності шістнадцятирічних значень кольору в заданих рядках. Для чого це? Може бути, ви хочете написати сервіс зі стиснення CSS коду, або щось подібне.

$ String \u003d "# 555555"; if (preg_match ( "/ ^ # (? :(? :( 3)) (1,2)) $ / i", $ string)) (echo "example 6 successful.";)

приклад пошукуtitle на заданій сторінці

Цей цікавий приклад PHP коду з regexp шукає і повертає текст між тегами і.

Feof ($ fp)) ($ page. \u003d Fgets ($ fp, 4096);) $ titre \u003d eregi ( " (.*)", $ Page, $ regs); echo $ regs; fclose ($ fp);

Парсинг балки Apache

Більшість сайтів працюють на відомих серверах Apache. Якщо ваш сайт також працює на ньому, то можна зробити парсинг балки сервера за допомогою php regexp.

// 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) / [^? "] + ?. html?) ?? ((? # parameters) [^?"] +)? HTTP / + "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) [ ^? "] +)? HTTP / + "s + (? # Status code) 404s + ((? # Bytes transferred) [- 0-9] +) s +" ((? # Referrer) [^ "] *)" s + "((? # User agent ) [^ "] *)" $ "

Приклад перевірки складності пароля

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

"A (? \u003d [-_ a-zA-Z0-9] *?) (? \u003d [-_ a-zA-Z0-9] *?) (? \u003d [-_ a-zA-Z0-9] *?) [-_a-zA-Z0-9] (6,) z "

Заміна текстових смайликів на графічні смайлики

Даний приклад коду буде міняти текстовий смайлик, на ваш графічний. Цікавий і корисний php сниппет.

$ Texte \u003d "A text with a smiley :-)"; echo str_replace ( ":-)", " ", $ Texte);

Приклад регулярного виразу для отримання зображень зhtml коду

Варто сказати, що даний php код використовується в wordpress, для пошуку і обробки зображень.

post_content; $ SzSearchPattern \u003d "~ ] * /\u003e ~ "; // 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 \u003d count ($ aPics); if ($ iNumberOfPics\u003e 0) (// Тут ви можете обробляти ваші зображення // В даному прикладі вони просто виведуться на монітор for ($ i \u003d 0; $ i< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Сподіваюся, вам була корисна підбірка прикладів php regexp. Якщо є цікаві доповнення або приклади регулярних виразів (php), пишіть в коментарях.

(PHP 4, PHP 5, PHP 7)

preg_replace - Виконує пошук і заміну по регулярному виразу

список параметрів

Шуканий шаблон. Може бути як рядком, так і масивом рядків.

Також доступні деякі модифікатори PCRE, включаючи застарілий " e"(PREG_REPLACE_EVAL), специфічний тільки для цієї функції.

Replacement

Рядок або масив рядків для заміни. Якщо цей параметр є рядком, а pattern є масивом, всі шаблони будуть замінені цим рядком. Якщо і pattern і replacement є масивами, кожен елемент pattern буде замінений відповідним елементом з replacement. Якщо масив replacement містить менше елементів, ніж масив pattern, то всі зайві шаблони з pattern будуть замінені порожніми рядками.

replacement може містити посилання виду \\\\ n, Або (починаючи з PHP 4.0.4) $ n, Причому останній варіант краще. Кожне таке посилання буде замінена на подстроку, відповідну n -ої подмаскі. n може приймати значення від 0 до 99, причому посилання \\0 (або $0 ) Відповідає входженню всього шаблону. Подмаскі нумеруються зліва направо, починаючи з одиниці. Для використання зворотного слеша, його необхідно продублювати (рядок PHP "\\\\" ).

При заміні за шаблоном з використанням посилань на подмаскі може виникнути ситуація, коли безпосередньо за маскою слід цифра (наприклад, установка цифри відразу після збіглася маски). У такому разі не можна використовувати знайому нотацію виду \\1 для посилання на подмаскі. Запис, наприклад, \\11 , збентежить preg_replace () , Так як вона не зможе зрозуміти, чи хочете ви використовувати посилання \\1 , За якою слідує цифра 1 або ж ви хочете просто використовувати посилання \\11 , За якою нічого не слід. Це непорозуміння можна усунути, якщо скористатися конструкцією \${1}1 , Що використовує ізольовану посилання $1 , І наступну за нею цифру 1 .

При використанні застарілого модифікатора e ця функція екранує деякі символи (а саме " , " , \ і NULL) в рядках, що заміщають зворотні посилання. Це зроблено для посвідчення коректності синтаксису при використанні зворотних посилань всередині одинарних або подвійних лапок (наприклад, "Strlen (\\" $ 1 \\ ") + strlen (" $ 2 ")"). Переконайтеся, що ви володієте синтаксисом обробки рядків PHP для того, щоб точно усвідомлювати, як буде виглядати інтерпретована рядок.

Subject

Рядок або масив рядків для пошуку та заміни.

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

Максимально можливу кількість замін кожного шаблону для кожного рядка subject. За замовчуванням дорівнює -1 (без обмежень).

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

значення, що повертаються

preg_replace () повертає масив, якщо параметр subject є масивом, інакше повертається рядок.

Якщо знайдені збіги, повертається нова версія subject, інакше subject повертається недоторканим, в разі помилки повертається NULL.

помилки

При використанні застарілого модифікатора "\\ e" кидається помилка рівня E_DEPRECATED.

список змін

приклади

Приклад # 1 Використання подмасок, за якими слід цифра

$ String \u003d "April 15, 2003";
$ Pattern \u003d "/ (\\ w +) (\\ d +), (\\ d +) / i";
$ Replacement \u003d "$ (1) 1, $ 3";
echo preg_replace ($ pattern, $ replacement, $ string);
?>

Приклад # 2 Використання масивів з числовими індексами в якості аргументів функції preg_replace ()

$ String \u003d "The quick brown fox jumped over the lazy dog.";
$ Patterns \u003d array ();
$ Patterns [0] \u003d "/ quick /";
$ Patterns [1] \u003d "/ brown /";
$ Patterns [2] \u003d "/ fox /";
$ Replacements \u003d array ();
$ Replacements [2] \u003d "bear";
$ Replacements [1] \u003d "black";
$ Replacements [0] \u003d "slow";

?>

Результат виконання даного прикладу:

The bear black slow jumped over the lazy dog.

Відсортувавши по ключам шаблони і заміни, отримуємо бажаний результат:

ksort ($ patterns);
ksort ($ replacements);
echo preg_replace ($ patterns, $ replacements, $ string);
?>

Результат виконання даного прикладу:

The slow black bear jumped over the lazy dog.

Приклад # 3 Заміна по декільком шаблонами

$ Patterns \u003d array ( "/ (19 | 20) (\\ d (2)) - (\\ d (1,2)) - (\\ d (1,2)) /",
"/ ^ \\ S * ((\\ w +)) \\ s * \u003d /");
$ Replace \u003d array ( "\\ 3 / \\ 4 / \\ 1 \\ 2", "$ \\ 1 \u003d");
echo preg_replace ($ patterns, $ replace, "(startDate) \u003d 1999-5-27");
?>

Регулярні вирази дозволяють знайти в рядку послідовності, відповідні шаблоном. Наприклад шаблон "Вася (. *) Пупкін" дозволить знайти послідовність коли між словами Вася і Пупкін буде будь-яку кількість будь-яких символів. Якщо треба знайти шість цифр, то пишемо "(6)" (якщо, наприклад, від шести до восьми цифр, тоді "(6,8)"). Тут розділені такі речі як покажчик набору символів і покажчик необхідної кількості:

<набор символов><квантификатор><жадность>

Замість набору символів може бути використано позначення будь-якого символу - точка, може бути вказаний конкретний набір символів (підтримуються послідовності - згадувані "0-9"). Може бути вказано "крім даного набору символів".

Покажчик кількості символів в офіційній документації по php називається "квантіфікатор". Термін зручний і не несе в собі пересудів. Отже, квантіфікатор може мати як конкретне значення - або одне фіксоване ( "(6)"), або як числовий проміжок ( "(6,8)"), так і абстрактне "будь-яке число, в т.ч. 0" ( " * ")," будь-яке натуральне число "- від 1 до нескінченності (" + ":" document + .txt ")," або 0, або 1 "("? "). За замовчуванням квантіфікатор для даного набору символів дорівнює одиниці ( "document.txt").

Для більш гнучкого пошуку поєднань ці зв'язки "набір символів - квантіфікатор" можна об'єднувати в метаструктур.

Як всякий гнучкий інструмент, регулярні вирази гнучкі, але не абсолютно: зона їх застосування обмежена. Наприклад, якщо вам треба замінити в тексті одну фіксовану рядок на іншу, фіксовану знову ж, користуйтеся str_replace. Розробники php слізно благають не користуватися заради цього складними функціями ereg_replace або preg_replace, адже при їх виклик відбувається процес інтерпретації рядка, а це серйозно споживає ресурси системи. На жаль, це улюблені граблі початківців php-програмістів.

Користуйтеся функціями регулярних виразів тільки якщо ви не знаєте точно, яка "там" рядок. З прикладів: пошуковий код, в якому з рядка пошуку вирізаються службові символи і короткі слова а так само вирізаються зайві прогалини (вірніше, всі прогалини стискаються: "+" замінюється на один пробіл). За допомогою цих функцій я перевіряю email користувача, що залишає свій відгук. Багато корисного можна зробити, але важливо мати на увазі: регулярні вирази не всесильні. Наприклад, складну заміну у великому тексті ними краще не робити. Адже, наприклад, комбінація "(. *)" В програмному плані означає перебір всіх символів тексту. А якщо шаблон не прив'язаний до початку або кінця рядка, то і сам шаблон "рухається" програмою через весь текст, і виходить подвійний перебір, вірніше перебір в квадраті. Неважко здогадатися, що ще одна комбінація "(. *)" Означає перебір в кубі, і так далі. Зведіть в третю ступінь, скажімо, 5 кілобайт тексту. Виходить 125 000 000 000 (прописом: Сто двадцять п'ять мільярдів операцій). Звичайно ж, якщо підходити строго, там стількох операцій не буде, а буде рази в чотири-вісім менше, але важливий сам порядок цифр.

набір символів

. крапкабудь-який символ
[<символы>] квадратні дужкиклас символів ( "будь-яка з"). наприклад
[^<символы>] негативний клас символів ( "будь окрім")
- тирепозначення послідовності в класі символів ( "" цифри)
\\ d Тільки цифри
\\ D[^0-9] Крім цифр
\\ w Букви і цифри
\\ W[^ A-z0-9]Крім букв і цифр
\\ s Пробільні символи: пробіл, табуляція, переклад рядка
\\ S[^ ] Крім пробільних символів
| (Одне | інше)На цьому місці може бути один з перерахованих варіантів, наприклад: (Вася | Петя | Маша). Якщо Ви не хочете, щоб це потрапило у вибірку використовуйте (?: ...)

Не користуйтеся класом символів для позначення всього лише одного (замість "+" цілком зійде "+"). Не пишіть в класі символів точку це ж будь-який символ, тоді інші символи в класі будуть просто зайвими (а в негативному класі вийде заперечення всіх символів).

квантіфікатор

Квантіфікатор можна вказати як конкретне значення, так і межі. Якщо число заданих підпадає під межі квантіфікатора, фрагмент вираження вважається яке співпало з розглядуваної рядком. синтаксис:

{<количество> }

{<минимум> , <максимум> }

Якщо потрібно вказати тільки необхідний мінімум, а максимуму немає, просто ставимо кому і не пишемо друге число: "(5,)" ( "мінімум 5"). Для найбільш часто вживаних квантіфікаторов є спеціальні позначення:

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

якоря

Ці символи повинні стояти відповідно на самому початку і в самому кінці рядка.

жадібність

Знак питання виступає ще і як мінімізатор квантіфікатора:
.*?

$1"; $ Re1 \u003d" | \\ (. *) \\ | Ixs "; $ re2 \u003d" | \\ (. *?) \\ | Ixs "; $ result \u003d preg_replace ($ re1, $ to, $ str); echo" жадібна версія: ".htmlspecialchars ($ result, ," windows-1251 ")."
"; $ Result \u003d preg_replace ($ re2, $ to, $ str); echo" Ледача версія: ".htmlspecialchars ($ result, ," windows-1251 ")."
";?\u003e Результат роботи прикладу: Жадная версія: жирний текст [b] а тут - ще жирніше повернулися Лінива версія: жирний текст [b] а тут - ще жирніше повернулися

Рядок шаблону, як ви вже помітили, починається і закінчується Слеш. Після другого йдуть параметри:

iрегістронезавісімий пошук
m

многостроковие режим. За замовчуванням PCRE шукає збіги з шаблоном тільки всередині одного рядка, а символи "^" і "$" збігаються тільки з початком і кінцем всього тексту. Коли цей параметр встановлений, "^" і "$" збігаються з початком і кінцем окремих рядків.

sсимвол "." (Точка) збігається і з перенесенням рядка (за замовчуванням немає)
Aприв'язка до початку тексту
Eзмушує символ "$" збігатися тільки з кінцем тексту. Ігнорується, якщо встановлено парамерт m.
UІнвертує "жадібність" для кожного квантіфікатора (якщо ж після квантіфікатора варто "?", Цей квантіфікатор перестає бути "жадібним").
eРядок заміни інтерпретітуется як PHP код.

Функції для роботи з регулярними виразами

  • preg_grep
  • preg_match - Виконує перевірку на відповідність регулярному виразу. Ця функція шукає тільки перший збіг!
  • preg_match_all
  • preg_quote - екранують символи в регулярних виразах. Тобто вставляє Слеш перед усіма службовими символами (наприклад, дужками, квадратними дужками і т.п.), щоб ті сприймалися буквально. Якщо у вас є будь-якої введення інформації користувачем, і ви перевіряєте його за допомогою регулярних виразів, то краще перед цим заекранувати службові символи в прийшла змінної
  • preg_replace
  • preg_replace_callback - Виконує пошук по регулярному виразу і заміну
  • preg_split

preg_grep

функція preg_grep - Повертає масив входжень, які відповідають шаблону

синтаксис

array preg_grep (String pattern, array input [, int flags])

preg_grep () повертає масив, що складається з елементів вхідного масиву input, які відповідають заданим шаблоном pattern.

Параметр flags може приймати наступні значення:

PREG_GREP_INVERT
У разі, якщо цей прапор встановлений, функція preg_grep (), повертає ті елементи масиву, які не відповідають заданим шаблоном pattern.
Результат, що повертається функцією preg_grep () використовує ті ж індекси, що і масив вихідних даних. Якщо така поведінка вам не підходить, застосуєте array_values \u200b\u200b() до масиву, що повертається preg_grep () для реіндексація.
Приклад коду:

// Повертає всі елементи масиву, // містять числа з плаваючою точкою $ fl_array \u003d preg_grep ( "/ ^ (\\ d +)? \\. \\ D + $ /", $ array);

preg_match

функція preg_match - Виконує перевірку на відповідність регулярному виразу

синтаксис

int preg_match (String pattern, string subject [, array matches [, int flags [, int offset]]]) Шукає в заданому тексті subject збіги з шаблоном pattern

У разі, якщо додатковий параметр matches вказаний, він буде заповнений результатами пошуку. Елемент $ matches буде містити частину рядка, відповідну входженню всього шаблону, $ matches - частина рядка, які відповідають першій подмаскі, і так далі.

flags може приймати наступні значення:

PREG_OFFSET_CAPTURE

Пошук здійснюється зліва направо, з початку рядка. Додатковий параметр offset може бути використаний для вказівки альтернативної початкової позиції для пошуку. Аналогічного результату можна досягти, замінивши subject на substr () ($ subject, $ offset).

Функція preg_match () повертає кількість знайдених відповідностей. Це може бути 0 (збіги не знайдені) і 1, оскільки preg_match () припиняє свою роботу після першого знайденого збіги. Якщо необхідно знайти або порахувати всі збіги, слід скористатися функцією preg_match_all (). Функція preg_match () повертає FALSE в разі, якщо під час виконання виникли будь-які помилки.

Рекомендація: Не використовуйте функцію preg_match (), якщо необхідно перевірити наявність підрядка в заданому рядку. Використовуйте для цього strpos () або strstr (), оскільки вони виконають це завдання набагато швидше.

приклад коду

приклад коду

приклад коду

Результат роботи прикладу:

domain name is: сайт

preg_match_all

функція preg_match_all - Виконує глобальний пошук шаблону в рядку

синтаксис

int preg_match_all (String pattern, string subject, array matches [, int flags [, int offset]])

Шукає в рядку subject всі збіги з шаблоном pattern і поміщає результат в масив matches в порядку, визначеному комбінацією прапорів flags.

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

Додатковий параметр flags може комбінувати такі значення (необхідно розуміти, що використання PREG_PATTERN_ORDER одночасно з PREG_SET_ORDER безглуздо):

PREG_PATTERN_ORDER
Якщо цей прапорець встановлений, результат буде впорядкований наступним чином: елемент $ matches містить масив повних входжень шаблону, елемент $ matches містить масив входжень першої подмаскі, і так далі.

приклад коду

]+>(.*)] +\u003e | U "," example:
this is a test
", $ Out, PREG_PATTERN_ORDER); echo $ out.", ". $ Out." \\ N "; echo $ out.", ". $ Out." \\ N ";?\u003e Результат роботи прикладу: example:,
this is a test
example:, this is a test

Як ми бачимо, $ out містить масив повних входжень шаблону, а елемент $ out містить масив подстрок, що містяться в тегах.

PREG_SET_ORDER
Якщо цей прапорець встановлений, результат буде впорядкований наступним чином: елемент $ matches містить перший набір входжень, елемент $ matches містить другий набір входжень, і так далі.

приклад коду

]+>(.*)] +\u003e | U "," example:
this is a test
", $ Out, PREG_SET_ORDER); echo $ out.", ". $ Out." \\ N "; echo $ out.", ". $ Out." \\ N ";?\u003e Результат роботи прикладу: example:, Example:
this is a test
, This is a test

В такому випадку масив $ matches містить перший набір входжень, а саме: елемент $ matches містить перше входження всього шаблону, елемент $ matches містить перше входження першої подмаскі, і так далі. Аналогічно масив $ matches містить другий набір входжень, і так для кожного знайденого набору.

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

У разі, якщо ніякої прапор не використовується, за замовчуванням використовується PREG_PATTERN_ORDER.

Пошук здійснюється зліва направо, з початку рядка. Додатковий параметр offset може бути використаний для вказівки альтернативної початкової позиції для пошуку. Аналогічного результату можна досягти, замінивши subject на substr () ($ subject, $ offset).

Повертає кількість знайдених входжень шаблону (може бути нулем) або FALSE, якщо під час виконання виникли будь-які помилки.

приклад коду

приклад коду

bold textclick me"; Preg_match_all (" / (<([\w]+)[^>]*>)(.*)(<\/\\2>) / ", $ Html, $ matches); for ($ i \u003d 0; $ i< count($matches); $i++) { echo "matched: " . $matches[$i] . "\n"; echo "part 1: " . $matches[$i] . "\n"; echo "part 2: " . $matches[$i] . "\n"; echo "part 3: " . $matches[$i] . "\n\n"; } ?> Результат роботи прикладу: matched: bold text part 1: part 2: bold text part 3: matched: click me part 1: part 2: click me part 3:

preg_quote

функція preg_quote - екранують символи в регулярних виразах

синтаксис

string preg_quote (String str [, string delimiter])

Функція preg_quote () приймає рядок str і додає зворотний слеш перед кожним службовим символом. Це буває корисно, якщо в складанні шаблону беруть участь рядкові змінні, значення яких в процесі роботи скрипта може змінюватися.

У разі, якщо додатковий параметр delimiter вказано, він буде також екрануватися. Це зручно для екранування обмежувача, який використовується в PCRE функціях. Найбільш поширеним обмежувачем є символ "/".

У регулярних виразах службовими вважаються наступні символи:. \\\\ + *? [^] $ () () \u003d!< > | :

приклад коду

приклад коду

". $ Word."", $ Textbody); echo $ textbody;?\u003e Результат роботи прикладу: This book is * Very * difficult to find.

preg_replace

функція preg_replace - Виконує пошук і заміну по регулярному виразу

синтаксис

mixed preg_replace (Mixed pattern, mixed replacement, mixed subject [, int limit])

Виконує пошук в рядку subject збігів з шаблоном pattern і замінює їх на replacement. У разі, якщо параметр limit вказано, буде проведена заміна limit входжень шаблону; в разі, якщо limit опущений або дорівнює -1, будуть замінені всі входження шаблону.

Replacement може містити посилання виду \\\\ n або (починаючи з PHP 4.0.4) $ n, причому останній варіант краще. Кожне таке посилання, буде замінена на подстроку, відповідну n "ної укладеної в круглі дужки подмаскі. N може приймати значення від 0 до 99, причому посилання \\\\ 0 (або $ 0) відповідає входженню всього шаблону. Подмаскі нумеруються зліва направо, починаючи з одиниці .

При використанні заміни за шаблоном з використанням посилань на подмаскі може виникнути ситуація, коли безпосередньо за маскою слід цифра. В такому випадку нотація виду \\\\ n призводить до помилки: посилання на першу подмаскі, за якою слідує цифра 1, запишеться як \\\\ 11, що буде інтерпретовано як посилання на одинадцяту подмаскі. Це непорозуміння можна усунути, якщо скористатися конструкцією \\ $ (1) 1, що вказує на ізольовану посилання на першу подмаскі, і наступну за нею цифру 1.

приклад коду

Результатом роботи цього прикладу буде:

Якщо під час виконання функції були виявлені збіги з шаблоном, буде повернуто змінене значення subject, в іншому випадку буде повернуто вихідний текст subject.

Перші три параметри функції preg_replace () можуть бути одновимірними масивами. У разі, якщо масив використовує ключі, при обробці масиву вони будуть взяті в тому порядку, в якому вони розташовані в масиві. Вказівка \u200b\u200bключів в масиві для pattern і replacement не є обов'язковим. Якщо ви все ж вирішили використовувати індекси, для зіставлення шаблонів і рядків, які беруть участь в заміні, використовуйте функцію ksort () для кожного з масивів.

The bear black slow jumped over the lazy dog.

Використовуючи ksort (), отримуємо бажаний результат:

The slow black bear jumped over the lazy dog.

У разі, якщо параметр subject є масивом, пошук і заміна за шаблоном виробляються для кожного з його елементів. Повертається результат також буде масивом.

У разі, якщо параметри pattern і replacement є масивами, preg_replace () по черзі витягує з обох масивів по парі елементів і використовує їх для операції пошуку і заміни. Якщо масив replacement містить більше елементів, ніж pattern, замість відсутніх елементів для заміни будуть взяті порожні рядки. У разі, якщо pattern є масивом, а replacement - рядком, за кожним елементом масиву pattern буде осущесвтлен пошук і заміна на pattern (шаблоном будуть по черзі всі елементи масиву, в той час як рядок заміни залишається фіксованою). Варіант, коли pattern є рядком, а replacement - масивом, не має сенсу.

Модифікатор / e змінює поведінку функції preg_replace () таким чином, що параметр replacement після виконання необхідних підстановок інтерпретується як PHP-код і тільки після цього використовується для заміни. Використовуючи даний модифікатор, будьте уважні: параметр replacement повинен містити коректний PHP-код, в іншому випадку в рядку, що містить виклик функції preg_replace (), виникне помилка синтаксису.

Приклад коду: Заміна по декільком шаблонами

Цей приклад виведе:

$ StartDate \u003d "5/27/1999";

Приклад коду: Використання модифікатора / e

] *\u003e) / E "," "\\\\ 1" .strtoupper ( "\\\\ 2"). "\\\\ 3" ", $ html_body);?\u003e

Приклад коду: Перетворює всі HTML-теги до верхнього регістру

]*?>.*?"Si", // Вирізає javaScript ""<[\/\!]*?[^<>] *?\u003e "Si", // Вирізає HTML-теги "" ([\\ r \\ n]) [\\ s] + "", // Вирізає пробільні символи "" & (quot | # 34); "i" , // Замінює HTML-суті "" & (amp | # 38); "i", "" & (lt | # 60); "i", "" & (gt | # 62); "i", " "& (nbsp | # 160);" i "," "& (iexcl | # 161);" i "," "& (cent | # 162);" i "," "& (pound | # 163) ; "i", "" & (copy | # 169); "i", "" (\\ d +); "e"); // інтерпретувати як php-код $ replace \u003d array ( "", "", "\\\\ 1", "\\" "," & ","<", ">"," ", Chr (161), chr (162), chr (163), chr (169)," chr (\\\\ 1) "); $ text \u003d preg_replace ($ search, $ replace, $ document); ?\u003e

preg_replace_callback

функція preg_replace_callback - Виконує пошук по регулярному виразу і заміну з використанням функції зворотного виклику

синтаксис

mixed preg_replace_callback (Mixed pattern, callback callback, mixed subject [, int limit])

Поведінка цієї функції багато в чому нагадує preg_replace (), за винятком того, що замість параметра replacement необхідно вказувати callback функцію, якої в якості вхідного параметра передається масив знайдених входжень. Очікуваний результат - рядок, якій буде проведена заміна.

приклад коду

\\ S * \\ w | ", create_function (// Використання одиночних лапок в даному випадку принципово, // альтернатива - екранувати всі символи" $ "" $ matches "," return strtolower ($ matches); "), $ line); echo $ line;) fclose ($ fp);?\u003e

preg_split

функція preg_split - Розбиває рядок по регулярному виразу

синтаксис

array preg_split (String pattern, string subject [, int limit [, int flags]])

Повертає масив, що складається з подстрок заданої рядки subject, яка розбита на межі, відповідним шаблоном pattern.

У разі, якщо параметр limit вказано, функція повертає не більше, ніж limit подстрок. Спеціальне значення limit, рівне -1, має на увазі відсутність обмеження, це дуже корисно для вказівки чергового опционального параметра flags.

Flags може бути довільною комбінацією наступних прапорів (з'єднання відбувається за допомогою оператора "|"):

PREG_SPLIT_NO_EMPTY
У разі, якщо цей прапор вказано, функція preg_split () поверне тільки непусті підрядка.

PREG_SPLIT_DELIM_CAPTURE
У разі, якщо цей прапор вказано, вираз, укладену в круглі дужки в розділяє шаблоні, також вилучають із заданого рядка і повертається функцією. Цей прапор був доданий в PHP 4.0.5.

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

приклади коду

У разі, якщо після відкриває круглої дужки слід " ?: ", Захоплення рядки не відбувається, і поточна подмаскі не нумеруються. Наприклад, якщо рядок" the white queen "зіставляється з шаблоном the ((?: Red | white) (king | queen)), будуть захоплені підрядка" white queen "і" queen ", і вони будуть пронумеровані 1 і 2 відповідно:

$ R \u003d "/ the ((?: Red | white) (king | queen)) /"; 0 \u003d "the white king"; 1 \u003d "white king"; 2 \u003d "king";

Ще про регулярні вирази:


Сервіси перевірки регулярних виразів:


Читати далі: Бібліотека Curl в PHP
.

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

Введення в регулярні вираження

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

Синтаксис регулярних виразів

Регулярний вираз Чи означає
foo Рядок "foo"
^ foo Рядок починається з "foo"
foo $ Рядок закінчується на "foo"
^ Foo $ «Foo» зустрічається в рядку тільки один раз
a, b, або c
будь-який символ в нижньому регістрі
[^ A-Z] будь-який символ, що не знаходиться в верхньому регістрі
(Gif | jpg) Чи означає як «gif" так і "jpeg"
+ Один або більше символів нижнього регістру
Будь-яка цифра, точка або знак мінус
^{1,}$ Будь-яке слово, хоча б одна буква, число або _
()() wy, wz, xy, або xz
(^ A-Za-z0-9) Будь-який символ (не числом і не буква)
({3}|{4}) Чи означає три букви або 4 цифри

PHP-функції для регулярних виразів

функція опис
preg_match () Функція preg_match () шукає рядок за заданим шаблоном, повертає true, якщо рядок знаходиться і false, в інших випадках
preg_match_all () Функція preg_match_all () знаходить все входження рядка, заданої за шаблоном
preg_replace () Функція preg_replace (), діє за тим же принципом, що і ereg_replace (), за винятком того, що регулярні вирази можна використовувати як для завдання шаблону пошуку, так і для рядка, на яку слід замінити, знайдене значення.
preg_split () Функція preg_split (), діє так само як split (), за винятком того, що регулярний вираз можна використовувати в якості параметра для шаблону пошуку.
preg_grep () Функція preg_grep () шукає всі елементи вхідного масиву, повертаючи все елементи, відповідні шаблоном регулярного виразу.
preg_quote () Екранує символи регулярного виразу

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

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

$ Url \u003d "http://komunitasweb.com/"; if (preg_match ( "/^(http|https|ftp)://(*(?:.*)+):?(d+)?/?/i", $ url)) (echo "Your url is ok . ";) else (echo" Wrong url. ";)

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

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

$ Text \u003d "Sample sentence from KomunitasWeb, 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 \u003d preg_replace ( "/ b (regex) b / i", " 1", $ Text); echo $ text;

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

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

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

Echo $ title;

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

\0", $ Title);?\u003e

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

Strong.search-excerpt (background: yellow;)

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

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

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

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

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

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

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

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

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

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

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

Function get_tag ($ tag, $ xml) ($ tag \u003d preg_quote ($ tag); preg_match_all ( "(<".$tag."[^>]*>(.*?). ")", $ Xml, $ matches, PREG_PATTERN_ORDER); return $ matches; )

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

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

.

Function get_tag ($ attr, $ value, $ xml, $ tag \u003d null) (if (is_null ($ tag)) $ tag \u003d "\\ w +"; else $ tag \u003d preg_quote ($ tag); $ attr \u003d preg_quote ($ attr); $ value \u003d preg_quote ($ value); $ tag_regex \u003d "/<(".$tag.")[^>] * $ Attr \\ s * \u003d \\ s * "." ([ "\\"]) $ Value \\\\ 2 [^\u003e] *\u003e (. *?)<\/\\1>/ "Preg_match_all ($ tag_regex, $ xml, $ matches, PREG_PATTERN_ORDER); return $ matches;)

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

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

$ String \u003d "# 555555"; if (preg_match ( "/ ^ # (? :(? :( 3)) (1,2)) $ / i", $ string)) (echo "example 6 successful.";)

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

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

$ Fp \u003d fopen ( "http://www.catswhocode.com/blog", "r"); while (! feof ($ fp)) ($ page. \u003d fgets ($ fp, 4096);) $ titre \u003d eregi ( " (.*)", $ Page, $ regs); echo $ regs; fclose ($ fp);

Парсинг логів 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) / [^? "] + ?. html?) ?? ((? # parameters) [^?"] +)? HTTP / + "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) [ ^? "] +)? HTTP / + "s + (? # Status code) 404s + ((? # Bytes transferred) [- 0-9] +) s +" ((? # Referrer) [^ "] *)" s + "((? # User agent ) [^ "] *)" $ "

Заміна подвійних лапок "розумними" лапками

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

Preg_replace ( "B" b ([^ "x84x93x94rn] +) b" B ","? 1? ", $ Text);

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

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

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

"A (? \u003d [-_ a-zA-Z0-9] *?) (? \u003d [-_ a-zA-Z0-9] *?) (? \u003d [-_ a-zA-Z0-9] *?) [-_a-zA-Z0-9] (6,) z "

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

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

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

post_content; $ SzSearchPattern \u003d "~ ] * /\u003e ~ "; // 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 \u003d count ($ aPics); if ($ iNumberOfPics\u003e 0) (// Now here you would do whatever you need to do with the images // For this example the images are just displayed for ($ i \u003d 0; $ i< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Генерація автоматичних смайлів

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

$ Texte \u003d "A text with a smiley :-)"; echo str_replace ( ":-)", " ", $ Texte);