метасимволы

Метасимволы

В этой статье рассмотрим, какие бывают метасимволы в регулярных выражениях с примерами. Различают несколько групп метасимволов. Рассмотрим каждую подробно.

Простые метасимволы

  • Экранирование \ — экранирование метасимволов и разделителей.
  • Точка . — любой символ, кроме символа перевода строки. Пример:
preg_match('/./', 'PHP 5', $matches);
$matches = [0];//получим Р
  • Знак вопроса ? — либо ноль, либо одно совпадение.
preg_match('/PHP.?5/', 'PHP 5", $matches);//совпадут оба выражения
  • Плюс + — одно или более совпадений.
/a+b/; // выдаст совпадение 'ab', "aab", 'aaaaaaab'
 preg_match('/а+b/', 'caaabc', $matches);
$matches = [0]; //получим aaab
  • Звездочка * — ноль или более совпадений.
/de*f/; // будут соответствовать строки 'df', 'def'', deeeef' и т.д.

Количественные метасимволы

  • {m} {m,n} {,n} {m,} — указываем число совпадений.
/tre{1,2}f/; //выдаст 'tref', 'treef', но не 'treeef'
/fo{2,}ba{,2}r; //'foobar', 'fooooooobar', но не 'foobaaar'
  • ^ — стоит в начале строки, означает начало строки, т.е. до нее ничего нет.
/^ghi/; //'ghik', 'ghi', но не 'fghi'
  • $ — стоит в конце строки, означает, что строка закончена, после ничего нет.
/John$/ //"Mike, John" и "Mike, John\n", но не "John Smith"
  • […] — класс искомых символов, задаем символы, которые нам нужны.
preg_match('/[0-9]+/', 'PHP is released in 2005',$matches);
$matches = [0]; // 2005
preg_match('/[^0-9]+/', 'PHP is released in 2005',$matches);
$matches = [0] // PHP is released in

Здесь, если галочка ^ стоит внутри класса искомых символов, она означает отрицание.

Метасимволы группировки

  • (…) — группировка элементов.
'PHP in 2005'//есть некоторая строка
preg_match('/([12][0-9])([0-9]{2})/','PHP in 2005",$matches);
$matches = [0] => 2005, [1] => 20, [2] => 05 //в первую ячейку упадет вся строка
//во вторую ячейку - 20
//в третью ячейку - 05
  • (?:…) — участок, который не должен попадать на выход регулярного выражения.
preg_match('/([A-Za-z ]+)(?:ith)/', 'John Smith',$matches);
$matches = [0] => John Smith, [1] => John Sm
//первая ячейка - строка полностью
//вторая ячейка - без ith
  • (?P’имя’…) — определяем именованный вложенный шаблон, когда выражение большое, чтобы не запутаться.
preg_match('/(?P<century>[12][0-9])(?P<year>[0-9]{2})/', 'PHP in 2005",$matches);
$matches = [0] => 2005, [century] => 20, [1] => 20, [year] => 05, [2] => 05
//по имени шаблона образовали именованные ячейки

Примеры

  • Есть строка — ’00:04:23:7с:5d:01′.
/^([0-9a-f][0-9a-f]<img src="http://phpmove.ru/uploads/smiles/smile.gif" width="19" height="19" alt="smile" style="border:0;" class="smiley">{5}[0-9a-f][0-9a-f]$/;
/^([0-9a-f]{2}<img src="http://phpmove.ru/uploads/smiles/smile.gif" width="19" height="19" alt="smile" style="border:0;" class="smiley">{5}[0-9a-f]{2}$/;
$matches = [0] => 00:04:23:7с:5d:01, [1] => 5d
  • Есть строка ‘John Smith ‘jsmith@site.com’.
/([^<]+)<([a-zA-Z0-9_-]+@([a-zA-Z0-9_-]+\\.)+[a-zA-Z0-9_-]+)>/;
$matches = [0] => John Smith <jsmith@site.com>,
[1] => John Smith,//получим имя
[2] => jsmith@site.com, //получили email
[3] => site //получили доменное имя

Понимание базовых основ поможет в будущем легко создавать довольно сложные регулярные выражения. Ну и практика, куда же без нее.




Добавить комментарий

Ваш e-mail не будет опубликован.