Preg_match(шаблон, строка)

Функция возвращает 1 , если найдет соответствие шаблону в строке хотя бы один раз, в противном случае возвращает 0. Шаблон записывается как переменная строкового типа, а само значение шаблона помещается в разделители – знаки деления (прямые слэши):

 

$str = ”abc5dr35f”;

//определяем наличие хотя бы одной цифры встроке

$pattern = ’/\d/’ ;

$value = preg_match($pattern, $str);

echo '$value = ', "$value <BR>"; // $value = 1

Базовые классы метасимволов предназначены для поиска одного единственного символа в строке. Для какого-либо полезного их применения язык регулярных выражений надо дополнить обозначениями того, сколько раз метасимволы могут встречаться в строке – операторами счетчиков символов (квантификаторами):

* повторение символа ноль или более раз /\w*/

+ повторение символа один или более раз /\w+/

? повторение предыдущего символа ноль или один раз /\d?/

{n} ровно n вхождений символа /\d{5}/

{n,}n или больше вхождений символа /\w{3,}/

{,n}n или меньше вхождений символа /\d{,5}/

{m,n} не менее чем m и не более чем n вхождений символа /\d{2,5}/

 

Найдем в исходной строке пять цифр, за которыми следует дефис, а затем еще четыре цифры:

 

$str = ”abc12345-1234dr35f”;

$pattern = ’/\d{5}-\d{4}/’;

$value = preg_match($pattern, $str);

echo '$value = ', "$value <BR>"; // $value = 1

При этом символы, не входящие в число метасимволов, например дефис, рассматриваются просто как текстовый символ, который нужно найти. Если поставить в этой строке между пятеркой и дефисом пробел, то функция не найдет совпадения с шаблоном.

Функция preg_match() ищет совпадение с шаблоном по всему тексту. Если необходимо, чтобы шаблон находился именно в начале исходной строки, то необходимо добавить символ привязки к начальной позиции ^:

$str = ”13312345-1234dr35f”;

$pattern = ’/^\d{5}/’; // пять цифр в начале строки

$value = preg_match($pattern, $str);

echo '$value = ', "$value <BR>"; // $value = 1

 

На конец строки указывает метасимвол $ :

$str = ”13312345-1234dr12345f”;

$pattern = ’/\d{5}$/’; // пять цифр в конце строки

$value = preg_match($pattern, $str);

echo '$value = ', "$value <BR>"; // $value = 0

 

$str = ”13312345-1234dr12345”;

$pattern = ’/\d{5}$/’; // пять цифр в конце строки

$value = preg_match($pattern, $str);

echo '$value = ', "$value <BR>"; // $value = 1

 

Если необходимо найти строку, состоящую исключительно из символов, соответствующих шаблону, то необходимо использовать эти метасимволы совместно:

$str = ”13312345-1234dr12345”;

$pattern = ’/^\d{5}$/’; // только пять цифр в строке

$value = preg_match($pattern, $str);

echo '$value = ', "$value <BR>"; // $value = 0

 

$str = ”1234512345”;

$pattern = ’/^\d{5}$/’; // только пять цифр в строке

$value = preg_match($pattern, $str);

echo '$value = ', "$value <BR>"; // $value = 0

 

$str = ”54321”;

$pattern = ’/^\d{5}$/’; // только пять цифр в строке

$value = preg_match($pattern, $str);

echo '$value = ', "$value <BR>"; // $value = 1

Можно создавать собственныеклассы символов, помещая символы в квадратные скобки. Допускается указывать диапазоны значений. Например, чтобы создать класс для обозначения шаблона соответствия одной из цифр от 3 до 5 , можно использовать [3-5]:

$str = ”4678891”;

$pattern = ’/[3-5]{1}[6-8]{4}/’;

$value = preg_match($pattern, $str);

echo '$value = ', "$value <BR>"; // $value = 1

Искали одно вхождение цифр от 3 до 5 и четыре вхождения цифр от 6 до 8. Нашли строку “46788”.

 

$str = ”ABC dkfd884sxRST”;

$pattern = ’/[a-z348]+/’;

$value = preg_match($pattern, $str);

echo '$value = ', "$value <BR>"; // $value = 1

Искали строчные латинские буквы или цифры 3, 4, 8. Нашли строку “dkfd884sx”.

Если не поставить знак «плюс» (повторение символов один или более раз) после закрывающей квадратной скобки, то будет найдена строка, состоящая только из одной буквы – “d”.

Символ вертикальной черты | используется для разделения альтернативных вариантов. Например, шаблон ‘город|село’ означает, что ищется любое слово - ‘город’ или ‘село’:

$str = ”Я проживаю в городе Иркутске”;

$pattern = ’/город|село/’; // или город или село

$value = preg_match($pattern, $str);

echo '$value = ', "$value <BR>"; // $value = 1

Допустимо указывать любое количество альтернатив. В процессе поиска соответствия просматриваются все перечисленные альтернативы слева направо до первого найденного соответствия.

Шаблоны могут работать по-разному в зависимости от модификаторов, которые добавляются после закрывающего шаблон разделителя. Самый известный модификатор:

i (ignore case)не различать строчные и прописные буквы:

 

$str = ”Я НЕ ВЫКЛЮЧИЛ CAPS LOCK”;

$pattern = ’/[а-я]/i’; // c модификатором

$value = preg_match($pattern, $str);

echo '$value = ', "$value <BR>"; // $value = 1

 

$str = ”Я НЕ ВЫКЛЮЧИЛ CAPS LOCK”;

$pattern = ’/[а-я]/’; // без модификатора

$value = preg_match($pattern, $str);

echo '$value = ', "$value <BR>"; // $value = 0

Можно не только узнать, имеется ли в исходной строке подстрока, соответствующая шаблону, но и получить эту подстроку. Для этого в качестве третьего параметра функции preg_match() задается имя массива. Нулевой элемент этого массива-списка будет содержать найденную подстроку:

$str = ”Злой браконьер охотился на зайчиков”;

$pattern = ’/конь|лошадь/i’; // или конь или лошадь

$value = preg_match($pattern, $str, $matches);

echo '$value = ', "$value <BR>"; // $value = 1

echo $matches[0], “<BR>”; // конь

Для разбиения строки на отдельные слова используется функция preg_split(). Ее действие аналогично действию функции explode(), но в качестве разделителей слов можно использовать не один, а несколько различных символов. Функция возвращает массив-список:

$fruit = ”яблоки, апельсины, персики и лимоны”;

$pattern = ’/, | и /’; // запятая с пробелом или и в пробелах

$fruit_array = preg_split($pattern, $fruit);

foreach ($fruit_array as $index=>$value)

{

echo “$index => $value <BR>”;

}

На экран будет выведено:

0 => яблоки
1 => апельсины
2 => персики
3 => лимоны

По умолчанию регулярные выражения соответствуют максимально возможному количеству символов в строке:

/к.*т/ - поиск строки произвольной длины, начинающейся буквой к и заканчивающейся последней найденной буквой т (не в смысле последним символом в строке):

$str = “кот кит корт кант”;

$pattern = ’/к.*т/’;

$value = preg_match($pattern, $str, $matches);

echo '$value = ', "$value <BR>"; // $value = 1

echo $matches[0], “<BR>”; // кот кит корт кант

Если после любого квантификатора поставить знак вопроса ? , то можно ограничить количество найденных символов:

/к.*?т/ - поиск строки произвольной длины, начинающейся буквой к и заканчивающейся первой найденной буквой т:

$str = “кот кит корт кант”;

$pattern = ’/к.*?т/’;

$value = preg_match($pattern, $str, $matches);

echo '$value = ', "$value <BR>"; // $value = 1

echo $matches[0], “<BR>”; // кот

Можно выявить не только найденную подстроку, но и любые ее фрагменты. Для этого внутри шаблона эти фрагменты необходимо заключить в круглые скобки (организовать подшаблоны):

$str = ”Дата моего рождения – 19.09.1949”;

$pattern = ’/([0-9]{2}).([0-9]{2}).([0-9]{4})/’; //дата рождения

$value = preg_match($pattern, $str, $matches);

echo '$value = ', "$value <BR>"; // $value = 1

foreach($matches as $index=>$value)

{

echo “$index => $value”;

echo “<BR>”;

}

На экран будет выведено:

$value = 1
0 => 19.09.1949
1 => 19
2 => 09
3 => 1949

Таким образом, в нулевой элемент массива снова помещается найденная подстрока, а в остальные элементы – фрагменты этой подстроки согласно номерам подшаблонов (по номеру открывающей круглой скобки перед подшаблоном):

([0-9]{2}) - первый подшаблон,

([0-9]{2}) - второй подшаблон,

([0-9]{4}) - третий подшаблон.

Регулярные выражения также позволяют выполнять замену фрагментов строк. Для этого используется функция :








Дата добавления: 2015-08-26; просмотров: 790;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.026 сек.