Создание многих фильтров Google Analytics требует некоторого знания регулярных выражений.
Регулярное выражение (RegEx) — это строка текста, в которой используются символы, числа и метасимволы для поиска соответствия в строке символов. Регулярные выражения обвиняют в том, что они слишком сложны и непонятны, и это нельзя назвать полностью несправедливыми обвинениями. Хотя основы регулярных выражений достаточно просты, шаблоны могут быть сложными.
Символы и числа, используемые в регулярных выражениях, — это латинские буквы A-Z (и a-z), цифры от 1 до 9 и некоторые символы, которые есть на клавиатуре.
Метасимволы (или символы подстановки) — это специальные символы или комбинации символов.
Ниже приведены метасимволы, которые используются в регулярных выражениях.
.
Точка соответствует любому одиночному символу: букве, цифре, знаку препинания или пробелу, но не символу окончания строки, такому как “возврат каретки”. Чтобы найти в предложении соответствие точке, используйте запись \.
, в которой обратная косая черта указывает на то, что метасимвол нужно “экранировать” и интерпретировать точку буквально.
*
Звездочка, добавленная к символу или метасимволу, будет соответствовать пустой строке или строке, состоящей из любого количества предыдущих элементов. Поэтому х*
будет соответствовать пустой строке, а также строкам х
, хх
, ххх
и любому количеству символов х
, стоящих подряд. В более общем виде .*
соответствует пустой строке или любой последовательности символов (включая числа и знаки препинания, но не символы окончания строки). Но будьте очень осторожны с модификатором *
; он очень “жадный”, т.е. ищет максимально возможное соответствие — и не всегда то, которое вам нужно. Например, у вас есть абзац из нескольких предложений, которые оканчиваются точками. Вы можете подумать, что последовательность .*.
будет соответствовать первому предложению, но она будет соответствовать всему абзацу.
+
Знак “плюс”, добавленный к символу или метасимволу, будет соответствовать одному или нескольким предыдущим элементам. Используйте этот модификатор, когда точно знаете, что вам не нужно находить соответствие с пустой строкой, и когда нужно потребовать присутствие определенного символа. Так, х+
будет соответствовать х
, хх
, ххх
и т. д., но не будет соответствовать пустой строке или строке символов, не содержащей символ х
.
?
Вопросительный знак соответствует пустой строке или одному из предыдущих элементов. Так, х?
будет соответствовать х
и хх
, но не ххх
. Добавление ?
к *
дает очень интересный результат. Запись .*
очень “жадная”, т.е. дает в результате самое большое возможное соответствие, а это не всегда то, что вам нужно. Так вот, запись .*?
избавляет выражение .*
от “жадности”. Например, чтобы найти соответствие первому предложению абзаца, используйте запись .*?.
.
?
вместе с модификатором +
для получения точно такого же эффекта. Шаблон .+?
будет соответствовать по меньшей мере одному символу, причем никакой “жадности” нет и в помине.
{ }
Фигурные скобки используйте для повторения точного количества раз. Например, запись [0–9] {4}
будет соответствовать любой группе в точности из четырех цифр. В фигурные скобки можно заключать несколько значений. Так, {2,5}
будет соответствовать любым двум или пяти символам.
( )
Заключите в круглые скобки шаблон, если хотите сохранить этот фрагмент информации для дальнейшего использования. Чтобы впоследствии сослаться на этот фрагмент текста, используйте экранированные числа: \1
— для первого сохраненного бита, \2
— для второго, \3
— для третьего и т. д.
[ ]
Квадратные скобки – заключите в них список символов, для которых нужно найти соответствие. Так, если нужно найти соответствие одновременно числам 67 и 68, можно использовать шаблон 6[78]
, который и решит эту задачу. Многие делают распространенную ошибку: помещают в квадратные скобки слово и думают, что будут искать соответствие этому слову. Соответствие ищется строго одному символу за другим. Для поиска соответствия словам используйте чередование с символом |
.
–
Знак “минус” создает диапазон в списке. Например, если вы хотите найти соответствие любой цифре, используйте [0–9]
,а не [0123456789]
.
|
Эта вертикальная черта используется для чередования и является аналогом слова “или”. Если, например, нужно найти соответствие слову “this” или “that”, используйте запись this|that
.
^
Этот символ определяет два возможных соответствия, в зависимости от того, где он находится. Если он заключен в квадратные скобки, это означает “нет”. Так, [^0–9]
означает “все, кроме цифры”. Если же он за пределами квадратных скобок, то это означает “в начале строки”. Например, запись ^Help
будет соответствовать слову Help
, если оно находится в начале строки.
$
Так же как символ ^
соответствует началу строки, символ $
означает конец строки/поля. Поэтому запись help me$
будет соответствовать словам help me
, только если они находятся в конце поля (или если за ними следует символ окончания строки, такой как возврат каретки или перевод строки).
\
экранирует любой метасимвол. При экранировании метасимвол становится литералом (т.е. самим этим символом). При отключении некоторых литеральных символов они становятся метасимволами (например, запись \d
означает “любая цифра” и аналогична использованию [0–9]
, но ее быстрее набирать на клавиатуре). Только некоторые литералы становятся метасимволами при экранировании.
При экранировании символа, который не имеет специального значения, ничего не произойдет. Вы можете даже экранировать экранирование с помощью записи \\
, которая вам понадобится, если нужно найти соответствие литеральной обратной косой черте.
Вот несколько дополнительных советов, которые вам пригодятся во время работы с метасимволами регулярных выражений.
^
и $
представляют начало или конец выражения. Они называются “якорями” и при правильном использовании могут ускорить обработку запросов.
|
для группировки шаблонов. Например, если вам нужно найти графические изображения с расширениями .jpg
, .gif
, .bmp
и .png
, то не нужно экранировать точку, стоящую перед расширениями. Вместо этого можно использовать выражение \.(jpg|gif|bmp|png)
, чтобы сгруппировать шаблон (и сохранить точный текст того, для чего нужно искать соответствие).
Выражение .*
соответствует всему, поэтому не забывайте о его “жадности”! Используйте запись .*?
, когда вам не нужно искать соответствие всему-всему-всему.
Помните, что .*
и .*?
будут соответствовать пустой строке (т.е. ничему, “”), а также строкам, содержащим символы. Если вы хотите быть уверены, что не будете нечаянно искать соответствие пустым строкам, обязательно используйте вместо этого записи .+
или .+?
.
Вы можете потратить месяцы — и даже годы — на изучение регулярных выражений и не выучить всего, что нужно знать. Но прямо сейчас нужно знать следующее: вам необходимы некоторые простые регулярные выражения, подобные приведенным в предыдущих примерах, чтобы создать фильтр типа Расширенный.
Конечно, более сложные выражения позволят воспользоваться более сложными возможностями фильтров. Поэтому, если вы хотите узнать больше, обратитесь к разделу Дополнительная информация о регулярных выражениях, чтобы узнать о некоторых дополнительных ресурсах по регулярным выражениям.
Что такое фильтр? | Чуть более длинный урок по регулярным выражениям |