Язык
Контакты
GitHub
Поддержка
Регистрация
Войти
Логин: Пароль: Запомнить:
Пользователи
Последние сообщения
Ответить
1

Конструкции для preg

skad0

  • Атом-мозг
  • Юзер
  • 841
  • Репутация:10 
  • Предупреждения: 0 
  • Регистрация:
    2 Окт 2010
#1
Вот нигде не могу найти исчерпывающую информацию о конструкциях для preg_match

Как к примеру обозначить текст введенный между определенными тегами, к примеру:
[size=\\1] \\1 [/size]

Drunya

  • Man of God
  • Админ
  • 3527
  • Репутация:110 
  • Предупреждения: 0 
  • Регистрация:
    30 Ноя -0001
#2
ну эта тема очень объемная, но я постараюсь дать тебе понятие о самых азах, а позже напишу статью. И так поехали:

регулярка в функции preg_match должна идти первым параметром и заключена в любой парный символ. Например
 1 
 2 
 3 
<?php preg_match('#ругулярка#');
preg_match('/ругулярка/');
preg_match('~ругулярка~');?>
Лично я предпочитаю решетку, так как любой символ что вы используете для выделения регулярки, прийдется экранировать внутри самого выражения, а решетки используются внутри него крайне редко, так что это идеальный символ для заключения в него регулярного выражения. Не будем на этом зацикливаться, просто поверьте мне на слово и используйте решетку:)

Регулярные выражения позволяют описывать шаблоны для поиска в тексте. Для этого создан набор конструкций, каждая из которых, означает определенный набор символов(букв, цифр или знаков препинания). Вот список некоторых из них.
$ - символ начала строки
^ - символ конца строки
\w - любые символы, которые могут образовать слово(буквы цифры и пробелы)
\W - противоположность \w
\d - Любое число(цифра)
\D - Противоположность \d
\s - пробельные символы(пробел, табуляция или перевод строки)

Это символьные классы, но так же есть и символы, позволяющие указывать количество символов, которые мы хотим найти.
+ - один или больше
? - ноль или один
* - любое число символов


Например
 1 
 2 
 3 
 4 
<?php // Ищем одно или более цифр между началом и концом строки
preg_match('#$\d+^#'$str);
// Ищем одно или более цифр в любом месте строки(где угодно)
preg_match('#\d+#'$str);?>


Так же в функции preg_match() можно использовать модификаторы. Модификаторы ставятся после замыкающего символа и до закрывающей ковычки:
 1 
 2 
<?php preg_match('#$\d+^#модификаторы'$str);?>
Модификаторы регулярных выражений позволяют передать регулярке определенные правила поиска. Вот какие они бывают:
i - поиск будет регистро независимым
U - инвертирует жадность квантификаторов(указателей количества). По умолчанию они жадные(забирают максимально возможное количество совпавших с шаблоном символов)
u - Указывает на то что мы используем UTF-8 строки(строки в кодировке УТФ-8)
m - если использовать этот модификатор, то символы $ и ^ буд соответствовать не абсолютному концу и началу текста а месту перед переводом строки и после него.



Если вам надо перечислить символы, которые надо найти, можно использовать квадратные скоббки. Все что в квадратных скобках, считается как ИЛИ. Например
 1 
 2 
<?php preg_match('#[abv]+#'$str);?>
Означает что мы пропустим один или более любых, из перечисленных в скобках символов. Эта регулярка будет действительна для всех следующих примеров
abv, ab, v, av и т.д.


Это совсем в кратце, далее спрашивайте если что.

Я горжусь тем, что создал бесплатную CMS - AtomX. И люблю нашу команду)

skad0

  • Атом-мозг
  • Юзер
  • 841
  • Репутация:10 
  • Предупреждения: 0 
  • Регистрация:
    2 Окт 2010
#3
сенкс

Obmer

  • Свой человек
  • Юзер
  • 129
  • Репутация:5 
  • Предупреждения: 0 
  • Регистрация:
    1 Июн 2010
#4
Получается что шаблоны для ereg подходят и для preg_match с незначительным отличием! Как-то мы скрипт автосерфинга редактировали там 102 ошибки были. Хост не принимал ereg и мы меняли на preg_match. Мы так и не доделали скрипт.

Бывает настолько сложно, что проще некуда
1
Сейчас online: 40. Зарегистрированных: 1. Гостей: 39.