Регулярные выражения
- Подробности
- Категория: PHP
- Просмотров: 329
Если необходимо найти схожие фрагменты во многих местах в разных файлах, то...
в этом случае часто применяются регулярные выражения на PHP (в данном случае рассматриваем). И нужно их применять с осторожностью и только там, где вы не знаете какие там будут слова и выражения, иначе лучше воспользоваться простыми str_replace и тд.
Сразу примеры:
if (preg_match("/\bweb\b/i", "My website the best.")) {
echo "Вхождение найдено.";
} else {
echo "Вхождение не найдено.";
}
тут регулярное выражение "/\bweb\b/i" - означает \b - начало и конец выражения, i - не учитывать регистр и найти требуется слово "web" и в этом случае вхождение не будет найдено, так как обозначен конец и начало, если их убрать, то совпадение найдется.
. точка означает любой символ, кроме \n и \r
Простые примеры регулярок
[0-9]{5} - только 5 цифр от 0 до 9
[0-9]{4,8} - только от 4 до восьми цифр от 0 до 9
Квантификатор - это количество повторений в регулярных выражениях:
{5} - 5 раз может быть что-то
* - от нуля до бесконечности, или же {0,}
+ плюс означает от 1 до бесконечности, или же {1,}
? означает или ноль или 1 раз, то есть что-то может либо быть, либо его может не быть, например "/?" - в url либо будет, либо нет...или же , или же {0,1}
Нужно отметить, что функции типа preg_replace или ereg_replace всегда нужно применять в редких случаях и, по возможности, заменять на str_replace, так как идет интерпретация строки и значительное потребление ресурсов. К примеру, выражение типа (.*) - означает перебрать все символы, а это очень много, если перебирать большие тексты и тд, на этом начинающие php-программисты могут споткнуться.
/d - или же - [0-9] - означает любое из цифр от 0 до 9
если поставить знак "крышечка", то будет наоборот:
/D - или же - [^0-9] - означает все КРОМЕ цифр.
/w - или же - [a-z0-9] - все цифры и буквы
если поставить знак "крышечка", то будет наоборот:
/W - или же - [^0-9] - означает все КРОМЕ цифр и букв.
/s - или же - [] - символы: пробел, табуляция, перевод строки
если поставить знак "крышечка", то будет наоборот:
/S - или же - [^0-9] - означает все КРОМЕ пробелов, табуляции, переводов строки.
| - вертикальная черта означает "или", то есть или одно или другое.
Начало и конец строки
^ - начало строки
$ - конец строки
Шаблоны, модификаторы и утверждения
$exp = /bmk/i
/<выражение>/ - шаблон заключенный в слэши, можно также использовать #@~, допустим, если разбирается url , то там есть слэши и лучше в этом случае использовать другой символ для удобства. Можно и другие символы, кроме пробела, обратного слэша и цифр.
а после стоит модификатор i - означающий, что буквы могут быть любого регистра.
Модификаторы
i - регистронезависимый (Ignore Case, case insensitive)
U - нежадный поиск (Make search ungreedy)
s - включая перевод строки (Includes New line) - то есть может быть рассмотрено несколько строк, а не одна
m - мультистрока (Multiple lines) - то есть разрывы строк с помощью точки в PHP
x - Extended for comments and whitespace - в данном случае можно разбить регулярку на несколько строк и сопровождать комментариями и это будет понято
e - Enables evaluation of replacement as PHP code. (preg_replace only)
S - Extra analysis of pattern
Модификаторы можно комбинировать, например - imx - это регистронезависимый мультистрочный с комментариями паттерн.
Утверждения (Assertions)
b - граница слова (Word Boundry)
B - НЕ граница слова (Not a word boundary)
A - начало шаблона (Start of subject)
z - конец шаблона (End of subject)
Z - конец шаблона или разрыв строки (End of subject or newline at end)
G - первая совпавшая позиция в шаблоне (First matching position in subject)
Более сложные примеры регулярок на PHP
/[^b]/ - любой символ кроме "b"