Материал предоставлен https://it.rfei.ru

Краткий урок по регулярным выражениям

Создание многих фильтров 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), чтобы сгруппировать шаблон (и сохранить точный текст того, для чего нужно искать соответствие).
  • Выражение .* соответствует всему, поэтому не забывайте о его “жадности”! Используйте запись .*?, когда вам не нужно искать соответствие всему-всему-всему.

    Помните, что .* и .*? будут соответствовать пустой строке (т.е. ничему, “”), а также строкам, содержащим символы. Если вы хотите быть уверены, что не будете нечаянно искать соответствие пустым строкам, обязательно используйте вместо этого записи .+ или .+?.

  • Придерживайтесь простоты. Чем более сложное регулярное выражение вы создадите, тем дольше оно будет обрабатываться. В случае очень сложного регулярного выражения вероятность ошибки также возрастает. Добавляйте только то, что необходимо, а все остальное выбрасывайте.

Вы можете потратить месяцы — и даже годы — на изучение регулярных выражений и не выучить всего, что нужно знать. Но прямо сейчас нужно знать следующее: вам необходимы некоторые простые регулярные выражения, подобные приведенным в предыдущих примерах, чтобы создать фильтр типа Расширенный.

Конечно, более сложные выражения позволят воспользоваться более сложными возможностями фильтров. Поэтому, если вы хотите узнать больше, обратитесь к разделу Дополнительная информация о регулярных выражениях, чтобы узнать о некоторых дополнительных ресурсах по регулярным выражениям.

Что такое фильтр?Чуть более длинный урок по регулярным выражениям