Информационные технологииStfw.Ru 🔍

Функции регулярных выражений (PCRE)

Функции работы с данными
🕛 01.11.2006, 13:19
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):

Шаблон

Подшаблоны

0

,

Фрагменты

0

$out[0][0] =

"<b>Пример:


</b>"

$out[0][l] = "Пример: "

$out(0][...J

1

$out[l][0]

"<div align=lefl> мой текст </div>"

$put[lj[l]-" мой текст "

$out[l]|...|

...

$out[...][0]

$out [...][!]

$out[...][...]



//Пример 1.
Получение телефонного номера.
preg_match_all t"/\(?
(\d{3.6})? \)?

(?(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)

    Учебник по основам PHP   Теги:

    Читать IT-новости в Telegram
    Информационные технологии
    Мы в соцсетях ✉