Функции за работа с регулярни изрази, Регулярни изрази, PHP-Помощ
Връща масив от събития, които съответстват на шаблона (PHP 4, PHP 5)
preg_grep() връща масив, състоящ се от елементите на входния входен масив, които отговарят на дадения шаблон.
Параметърът flags може да приема следните стойности:
Ако този флаг е зададен, функцията preg_grep() връща онези елементи от масива, които не отговарят на дадения модел. Този флаг е наличен от PHP 4.2.0.
От PHP 4.0.4, резултатът, върнат от preg_grep(), използва същите индекси като оригиналния масив от данни. Ако това поведение не ви устройва, приложете array_values() към масива, върнат от preg_grep() за повторно индексиране.
Връща кода за грешка при изпълнение на последния PCRE
Връща една от следните константи:
Извършва глобално търсене по шаблон на низ (PHP 3 >= 3.0.9, PHP 4, PHP 5)
Търси тема за всички съвпадения на шаблон и поставя резултата в масива за съвпадения в реда, определен от комбинацията от флагове.
След намиране на първото съвпадение последващите търсения ще се извършват не от началото на низа, а от края на последното намерено срещане.
Незадължителният параметър за флагове може да комбинира следните стойности (имайте предвид, че използването на PREG_PATTERN_ORDER едновременно с PREG_SET_ORDER е безсмислено):
Ако този флаг е зададен, резултатът ще бъде подреден по следния начин: елементът $matches[0] съдържа масив от пълни съвпадения на шаблона, елементът $matches[1] съдържа масив от срещания на първия подмодел и т.н.
Резултатът от примера:
Както виждаме, $out[0] съдържа масив от пълни съвпадения на шаблона, а елементът $out[1] съдържа масив от поднизове, съдържащи се в таговете.
Ако товафлагът е зададен, резултатът ще бъде подреден както следва: елементът $matches[0] съдържа първия набор от срещания, елементът $matches[1] съдържа втория набор от срещания и т.н.
Резултатът от примера:
В този случай масивът $matches[0] съдържа първия набор от съвпадения, а именно: елементът $matches[0][0] съдържа първото появяване на целия шаблон, елементът $matches[0][1] съдържа първото появяване на първия подмодел и т.н. По подобен начин масивът $matches[1] съдържа втория набор от съвпадения и така нататък за всеки намерен набор.
Ако този флаг е зададен, за всеки намерен подниз ще бъде посочена неговата позиция в изходния низ. Трябва да се помни, че този флаг променя формата на върнатите данни: всяко срещане се връща като масив, чийто нулев елемент съдържа намерения подниз, а първият елемент съдържа отместването. Този флаг е наличен в PHP 4.3.0 и по-нови версии.
В случай че не се използва флаг, PREG_PATTERN_ORDER се използва по подразбиране.
Търсенето се извършва отляво надясно, от началото на реда. Незадължителният параметър за отместване може да се използва за указване на алтернативна начална позиция за търсене. Допълнителният параметър за отместване е наличен от PHP 4.3.3.
Забележка: Използването на параметъра за отместване не е еквивалентно на замяната на съответстващия низ с substr($subject, $offset) при извикване на preg_match_all(), тъй като моделът може да съдържа условия като ^, $ или (? = 3.0.9, PHP 4, PHP 5)
Търси съвпадения с дадена тема на текста с шаблон
Ако параметърът за незадължителни съвпадения е указан, той ще бъде попълнен с резултатите от търсенето. Елементът $matches[0] ще съдържа частта от низа, която съответства на появата на целия шаблон, $matches[1] е частта от низа,съответстващ на първия подмодел и т.н.
флаговете могат да приемат следните стойности:
Ако този флаг е зададен, за всеки намерен подниз ще бъде посочена неговата позиция в изходния низ. Трябва да се помни, че този флаг променя формата на върнатите данни: всяко срещане се връща като масив, чийто нулев елемент съдържа намерения подниз, а първият елемент съдържа отместването. Този флаг е наличен в PHP 4.3.0 и по-нови версии.
Параметърът за допълнителни флагове е наличен от PHP 4.3.0.
Търсенето се извършва отляво надясно, от началото на реда. Незадължителният параметър за отместване може да се използва за указване на алтернативна начална позиция за търсене. Допълнителният параметър за отместване е наличен от PHP 4.3.3.
Забележка: Използването на параметъра за отместване не е еквивалентно на замяната на съответстващия низ с substr($subject, $offset) при извикване на preg_match_all(), тъй като моделът може да съдържа условия като ^, $ или (? = 3.0.9, PHP 4, PHP 5)
Функцията preg_quote() взема низа str и добавя обратна наклонена черта преди всеки екраниращ знак. Това може да бъде полезно, ако в компилацията на шаблона са включени низови променливи, чиято стойност може да се промени по време на изпълнението на скрипта.
Ако е зададен незадължителният параметър за разделител, той също ще бъде екраниран. Това е полезно за екраниране на разделител, който се използва във функциите на PCRE. Най-често срещаният разделител е знакът '/'.
В регулярните изрази следните символи се считат за служебни: . \\ + * ? [^] $ ( ) < >= ! :
Пример. Курсив на дума в текста
Извършва търсене и замяна на регулярен израз с помощта на обратното извикване (PHP 4 >= 4.0.5, PHP 5)
Поведението на тази функция е подобно на preg_replace(), с изключение на това, че вместо параметъра за заместване, трябва да посочите функция за обратно извикване, на която се предава масив от намерени събития като входен параметър. Очакваният резултат е низът, който трябва да бъде заменен.
Доста често функцията за обратно извикване, освен в извикването на preg_replace_callback (), не участва в нищо друго. Въз основа на тези съображения можете да използвате create_function(), за да създадете функция за обратно извикване без име директно в извикването preg_replace_callback(). Ако използвате този подход, цялата информация, свързана със замяната на регулярни изрази, ще бъде събрана на едно място и пространството на имената на функцията няма да бъде претрупано с неизползвани записи.
Пример. preg_replace_callback() и create_function()
Извършва търсене и замяна на регулярен израз (PHP 3 >= 3.0.9, PHP 4, PHP 5)
Търси темата за съвпадения на модела и ги заменя със замяна. Ако параметърът limit е посочен, срещанията на limit на шаблона ще бъдат заменени; ако ограничението е пропуснато или е равно на -1, всички срещания на шаблона ще бъдат заменени.
Пример 1: Използване на подмодели, последвани от цифра
Резултатът от този пример ще бъде:
Ако по време на изпълнение на функцията бъде намерено съвпадение на шаблон, ще бъде върната модифицираната стойност на темата, в противен случай ще бъде върнат оригиналният текст на темата.
Първите три параметъра на функцията preg_replace() могат да бъдат едномерни масиви. Ако масивът използва ключове, тогава при обработката на масива те ще бъдат взети в реда, в който са разположени в масива. Указването на ключове в масив за шаблон и замяна не езадължително. Ако решите да използвате индекси, използвайте функцията ksort() за всеки масив, за да съответства на моделите и низовете, включени в замяната.
Пример. Използване на масиви с числови индекси като аргументи на функцията preg_replace().
Използвайки ksort(), получаваме желания резултат:
Ако обектният параметър е масив, търсенето и замяната по образец се извършват за всеки негов елемент. Върнатият резултат също ще бъде масив.
Ако параметрите pattern и replacement са масиви, preg_replace() извлича двойка елементи от двата масива на свой ред и ги използва за операцията за търсене и замяна. Ако заместващият масив съдържа повече елементи от шаблона, вместо липсващите елементи за заместване ще бъдат взети празни низове. Ако шаблонът е масив и замяната е низ, всеки елемент от шаблона на масива ще бъде претърсен и заменен с шаблон (моделът ще бъде всички елементи на масива на свой ред, докато низът за заместване остава фиксиран). Опцията, когато моделът е низ, а заместването е масив, няма смисъл.
Модификаторът /e променя поведението на функцията preg_replace() по такъв начин, че заместващият параметър, след извършване на необходимите замествания, се интерпретира като PHP код и едва след това се използва за заместване. Когато използвате този модификатор, бъдете внимателни: заместващият параметър трябва да съдържа валиден PHP код, в противен случай ще възникне синтактична грешка в реда, съдържащ извикването на функцията preg_replace().
Пример. Замяна с множество шаблони
Този пример ще изведе:
Пример. Използване на модификатора /e
Преобразува всички HTML тагове в главни букви
Пример. HTML към конвертортекст
Забележка: Параметърът limit е наличен в PHP 4.0.1pl2 и по-нови версии.
Разделя низ на регулярен израз (PHP 3 >= 3.0.9, PHP 4, PHP 5)
Връща масив, състоящ се от поднизове на дадения субект на низ, разделен по граници, съответстващи на шаблона.
Ако параметърът limit е посочен, функцията връща не повече от поднизове limit. Специалната гранична стойност от -1 предполага липса на ограничение, което е много полезно за указване на друг незадължителен параметър за флагове.
флаговете могат да бъдат всяка комбинация от следните флагове (връзката се осъществява чрез оператора ''):
Ако този флаг е зададен, функцията preg_split() ще върне само непразни поднизове. PREG_SPLIT_DELIM_CAPTURE
Ако този флаг е посочен, изразът, ограден в скоби в шаблона на разделител, също се извлича от дадения низ и се връща от функцията. Този флаг беше добавен в PHP 4.0.5. PREG_SPLIT_OFFSET_CAPTURE
Ако този флаг е зададен, за всеки намерен подниз ще бъде посочена неговата позиция в изходния низ. Трябва да се помни, че този флаг променя формата на върнатите данни: всяко срещане се връща като масив, чийто нулев елемент съдържа намерения подниз, а първият елемент съдържа отместването.
Пример 1. Пример за preg_split(): Получаване на поднизове от даден текст
Пример 2. Разделяне на низ на съставните му знаци
Пример 3. Разделяне на низ, указващ отместването за всеки от намерените поднизове
На изхода получаваме:
Забележка: Параметърът flags беше добавен в PHP 4 Beta 3.