Лично я предпочитаю решетку, так как любой символ что вы используете для выделения регулярки, прийдется экранировать внутри самого выражения, а решетки используются внутри него крайне редко, так что это идеальный символ для заключения в него регулярного выражения. Не будем на этом зацикливаться, просто поверьте мне на слово и используйте решетку
Регулярные выражения позволяют описывать шаблоны для поиска в тексте. Для этого создан набор конструкций, каждая из которых, означает определенный набор символов(букв, цифр или знаков препинания). Вот список некоторых из них.
$ - символ начала строки
^ - символ конца строки
\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 и т.д.
Получается что шаблоны для ereg подходят и для preg_match с незначительным отличием! Как-то мы скрипт автосерфинга редактировали там 102 ошибки были. Хост не принимал ereg и мы меняли на preg_match. Мы так и не доделали скрипт.