Функции регулярных выражений (PCRE)
pregjnatch
Одиночный регулярный поиск
int pregjnatch (string pattern, string subject [, array matches])
Ищет в тексте, указанном аргументом subject, соответствие шаблону, указанному в pattern. Если совпадение находится, то функция возвращает TRUE, в противном случае — FALSE.
При указании в аргументе matches массива (одномерного) он заполняется найденными фрагментами совпадения. $matches[0] будет содержать фрагмент, совпадающий с полным шаблоном, $matches[l] -совпадение с первым подшаблоном и т. д.
Так как возвращается только одно совпадение, функцию целесообразно использовать исключительно в целях проверки пли в случае, когда множественные совпадения исключены.
if (pregjnatch ("/XX/i". "уу Хх хухх")) { // игнорировать регистр print "Найдено" } else { rint "Безуспешный поиск". if (preg_match C7\bxx\b/i" . "уу Хх лухх")) // искать слово '<хх» print "Найдено": else print "Безуспешный поиск"; preg_match("r(http "http-//www php.net/index.html", Smatches): $host = $matches[2]: //должно содержать: www.php.net // найти имена двух последних доменов сервера preg_match("/r\.\/]-t-\.r\.\/]+$/".$host.$matches): echo "domain name is: ".$matches[0]."\n": // напечатает domain nane is php net
См. также: pregjnatcrall(), preg_replace(), preg_split().
preg_match_all
Полный регулярный поиск
int preg_match_all (string pattern, string subject, array matches [, int order])
Ищет в тексте, указанном аргументом subject, все возможные соответствия шаблону, указанному в pattern. Поиск последующих совпадений производится от места последнего совпадения. Функция возвращает число совпадений с полным шаблоном или FALSE, если совпадений не было (или произошла ошибка).
В аргументе matches указывается массив (двухмерный), который заполняется найденными фрагментами совпадения. Аргумент order определяет вид, в котором сохраняются результаты поиска в массиве matches, и может принимать два значения.
PREG_PATTERN_ORDER (по умолчанию) - в виде [(под)шаб-лон] [фрагмент]. В (под)массиве Smatches[0] сохраняются совпадения с полным шаблоном, в $matches[l] и последующих — совпадения с подшаблонами. preg_match__all ("|<[A>]+>( .*)</[*>]+>|U". "<b>Пример: </b> <div aliqn=left> мой текст </div>", Jout. PREG_PATTERN_ORDER):
Теперь массив Sout будет содержать следующие элементы (общая схема):
Фрагменты | ||||
0 | 1 | ... | ||
Шаблон | 0 | $out[0]|0] = "<b>Пример: </b>" | $out[0][l] = "<cliv aligrHeft> мой T6KCT</div>" | $out[0)[...] |
Под-шаблоны | 1 | $out[l][0] = "Пример: " | Sout[l][l] = " мой текст " | $out[l]L-..] |
$out[...][0] | $out[...][l] | $out[...][...] |
PREG_SET_ORDER — в виде [фрагмент] [(под)шаблон]. В (гюд)массивах $matches[0] — $matches[xxx] сохраняются соответствующие фрагменты совпадения.
preg_match_all ("[<[*>]+>(.*)</[">]+>|U". "<b>Пример: </b> <div align-left* мой текст </div>", $out. PREG SET ORDER):
"<b>Пример:
</b>"
"<div align=lefl> мой текст </div>"
(?(1) [\-\s] ) \d{3}-\d{4}/x". "Call 555-1212 or 1-800-555-1212", Sphones). // Пример 2. Искать парные HTML теги (жадно) // \\2 - ссылка, здесь на t[\wj+) Shtml = "<b>bold text</b>--a href=howdy.htrol>click me</a> preg_match_dll ("/(<([\w]+)[*>]*>K.*)(<\/\\2>)/". Shtnl. Sratches); for ($i=0. $i< count($inatches[0]). $i++) { echo "фрагмент: " $matches[0][$i] "\n". "часть 1 " $matches[l][$i] "\n". "часть 2: ".$matches[3][$i]."\n". "часть 3: ".$matches[4][$i]."\n\n". }
После запуска примера будет выведено:
фрагмент: <b>bold text</b> часть 1 <b>
часть 2: bold text часть 3: </b> фрагмент: <а href=howdy.html> click me<@060>/a> часть1: <а href=howdy.html> часть 2: click me часть 3 </а>
См. также: preg_match(), preg_replace(), preg_split().
preg_replace
Регулярный поиск с заменой
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])
Ищет в тексте subject вес фрагменты, соответствующие шаблону pattern, и заменяет их на replacement. Возвращает измененный текст. Если совпадений не находится, то возвращается неизмененный текст subject. Аргумент limit указывает, сколько фрагментов надо заменить; если он не указан или равен
-1, то заменяются все найденные фрагменты.
replacement может содержать обратные ссылки (обычные для регулярных выражений) в форме \\п или, что более предпочтительно, в форме $п. Каждая такая ссылка будет заменяться на фрагмент исходного текста, соответствующий указанному подшаблону. Обычно n может быть от 0 до 99 и \\0 или $0 соответствует целому шаблону.
Каждый аргумент (кроме limit) может быть массивом. В простейшем случае к массиву с текстом применяются единые шаблон и замена (возвращается соответствующий массив). Возможно применение к одному тексту набора шаблонов и заместителей. Если в массиве replacement недостаточно элементов, то вместо них используются пустые строки; если аргумент replacement — строка, то она используется для всех элементов. Сходные комбинации возможны, но едва ли полезны.
Наиболее мощной возможностью функции является возможность использования в регулярном выражении pattern модификатора е. Это заставляет функцию обрабатывать текст замещения replacement как PHP-код (в котором также возможно использовать ссылки). Но не забывайте, что тогда код должен соответствовать всем синтаксическим правилам РНР, иначе будет спровоцирована ошибка.
//Пример 1 Spatterns = array ("/(19|20)(\d{2}) -(\d{1.2})-(\d{1.2})/". "r\s*{(\w+)}\s*=/"): $r-eplace = array ("\\3/\\4/\\l\\2". "$\U ="); print preg_replace (Spatterns, Sreplace. "{startDate} = 1984-5-27"); //напечатает: SstartDate = 5/27/1984 // Пример 2. «использование модификатора /е» // делает все HTML теги заглавными preg_replace ("/(<V)(\w+)([">]*>)/e". "\\Г .strtoupper('\\2') '\\3'", $html_body); // Пример 3. Преобразование HTML в текст // Sdocument должен содержать текст HTML. // Удаляются теги HTML tags, секции javascript // пробелы 8 начале строк. Подстановки HTML конвертируются // в их символьное представление. $search = array C"<scnpt[*>]*?> *? </scnpt»'sn". // Вырезать javascript "<[\Л!]*?[Ж<>]*?>'51". // Вырезать теги html "' ([\r\n])[\s]+'". // Вырезать начальные пробелы "'&(quot|#34);'т", // Заменить html entities "'&(amp||38).'V. '"&(lt|#60):'i". "'&(gt|#62): '-!". '"&(nbsp|#160):'i". '"Sdexcllfien.1!" . '"&(cent|fl62);'i". '"&(pound|#163);'i". '"&(copy|#169);'i". "'&#(\d+).'e"): // обработать php кодом Sreplace = array ("". "\\1", "\"". "&". 11 <" M>". chr(161). chr(162). chr(163). chr(169). "chr(\\l)"): Stext = preg_replace (Ssearch. Sreplace. Sdocument).
См. также: pregjnatch(), preg_match_all(), preg_split().
preg_split
Нарезка регулярным выражением
array preg_split (string pattern, string subject [,
int limit [, int flags]])
Возвращает массив, содержащий части текста subject, находящиеся между фрагментами, соответствующими шаблону pattern.
Аргументом limit можно указать число элементов в возвращаемом массиве.
При указании в аргументе flags значения PREG_SPLIT_NO_EMPTY в возвращаемом массиве не сохраняются пустые значения.
// Разделить текст пробельными символами или запятыми Skeywords = preg_split ("/[\s.]+/". "hypertext language, programming"); // разделить строку на составляющие символы $str = 'ноя string'; $chars = preg_split('//'. $str. 0. PREG_SPLIT_NO_FMPTY): print_r($chars):
См. также: preg_match(), pregjnatch_al 1 (), preg_replace().
preg_quote
Цитирование метасимволов регулярного выражения
string preg_quote (string str [, string delimiter])
Возвращает строку str, и которую вставлены слеши перед каждым символом, являющимся метасимволом в регулярных выражениях. Это бывает полезно, когда во время исполнения необходимо создать шаблон для поиска в тексте фрагмента, который может содержать специальные символы.
Метасимволами регулярных выражений считаются: .Л\ + *?[*]$(){}-! <> .| :
В аргументе delimiter можно указать перечисление дополнительных символов, которые следует предварять слешем (обычно здесь полезно указать ограничитель шаблона).
Skeywords = "$40 за дЗ/400"; Skeywords = preg_quote (Skeywords. "/"); echo $keywords. // возвращает: \$40 for a g3\/400 // Выделение курсивом слова в тексте HTML, помеченного звездочками Stextbody = "Это *очснь* сложное выражение.". Sword = "*очень*": Stextbody •= preg_replace ("/(".preg_quote(Sword) ")/". "<-,>$1</1>". Stextbody);
preg_grep
фильтрация элементов массива в соответствии с шаблоном
array preg_grep (string pattern, array input)
Возвращает массив input, в котором оставлены только элементы, соответствующие указанному pattern шаблону.
// возвращает все элементы, содержащие
дробные числа $f1 array =
preg_grep ("/~(\d+)?\ \d+$/". $arra;y)