Изучаем регулярные выражения самостоятельно - модификаторы шаблонов ( часть 8 )

Регулярные выражения - Модификаторы шаблонов

В последнею статью по регулярным выражениям мы поговорим о модификаторах шаблонов.

С помощью этих модификаторов можно задать дополнительные правила для поиска соответствий в строке, по указанному регулярному выражению.

Модификатор указывается в конце регулярного выражения, после закрывающего символа. Например, если регулярное выражение указанно между двумя слешами, то модификатор ставится после закрывающего слеша.

    var reg = /регулярное_выражение/модификатор_шаблона

Далее, познакомимся с каждым модификатором подробнее и узнаем, как они меняют правила поиска соответствий по указанному регулярному выражению. Так сказать, узнаем, что они из себя представляют.

Модификатор g

Позволяет делать глобальный поиск соответствий в строке, по указанному регулярному выражению. Его работа особенно заметна, когда необходимо поискать все соответствия и поместить их в массив. Для этого в JavaScript есть функция str.match(), а в PHP функция preg_match_all().

Мы его уже использовали в примерах из статьи "Регулярные выражения — Жадные и ленивые квантификаторы ( Часть 7 )"

Модификатор i

По умолчанию в регулярных выражениях регистр важен. Этот модификатор "i", делает поиск соответствий регистронезависимым. То есть поиск соответствий по указанному шаблону, реализуется без учёта регистра. На практике, этот модификатор используется чаще всего.

Приведу небольшой пример:

    "use strict"
    var str = 'ищем строку nlo';
    var reg = /NLO/;
    alert(reg.test(str));// false

Как мы видим, результат проверки равен false. В строке мы ищем строку NLO, написанную большими буквами, но так как по умолчанию регистр важен, мы ничего не нашли.

Для того чтобы часть строки соответствовало указанному регулярному выражению мы в строке должны поменять слово "nlo" на "NLO", или воспользоваться модификатором i.

    "use strict"
    var str = 'ищем строку nlo';
    var reg = /NLO/i;
    alert(reg.test(str));// true

Теперь результат проверки равен true. Потому что поиск реализуется в независимости от регистра. А слово "nlo" может быть написана в любом варианте: "nLo", "Nlo" или "nlO". Оно по любому будет соответствовать регулярному выражению.

Модификаторы m и s

Модификатор "m" делает поиск многострочным. Он полезен в случае если в тексте присутствует хотя бы один переход на новую строку.

Модификатор "s" считает весь текст одной строкой. Он используется по умолчанию и поэтому его можно не указывать.

Чтобы было понятнее, сначала приведу пример с модификатором "s". Я его не указал потому что он используется по умолчанию.

    "use strict"
    var str = 'В первой строке отсутствует символ доллара\n$ - о, доллар';
    var reg = /^\$/;
    alert(reg.test(str));// false

Естественно результат равен false, потому что в начале строки у нас отсутствует символ доллара.

Обратите внимание что строка из переменной "str" разделена на две строки с помощью escape символа '\n'. Этот символ делает переход на новую строку. То есть наша строка выглядит так:

В первой строке отсутствует символ доллара
$ - о, доллар

Если мы в конце регулярного выражения добавим модификатор "m", то результат проверки станет true.

Почему? Потому что модификатор "m" делает поиск многострочным. То есть мы ищем символ доллара в начале первой строки, и видим, что его там нет. Переходим в начале второй строки и находим его. Поэтому, в таком случае результат проверки равен true.

    "use strict"
    var str = 'В первой строке отсутствует символ доллара\n$ - о, доллар';
    var reg = /^\$/m;
    alert(reg.test(str));// true

Модификатор x

Внимание! Этот модификатор не работает в JavaScript, поэтому примеры покажу на языке PHP.

По умолчанию каждый символ из строки должен соответствовать символу из регулярного выражения, это относится и к пробелам. То есть между слов из строки должно быть столько пробелов, сколько есть в регулярном выражении. Иначе строка не будет соответствовать регулярному выражению.

Например:

<?php
    $reg = '/x y z/';
    echo '<p> result = '.preg_match($reg, 'xyz').'</p>'; //false
?>

Результат равен нулю(false), потому что между буквами "xyz" из строки отсутствует пробелы.

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

<?php
    $reg = '/x y z/x';
    echo '<p> result = '.preg_match($reg, 'xyz').'</p>'; //true
?>

Теперь результат равен 1(true).

На практике этот модификатор используется очень редко.

На этом всё. Что касается остальных модификаторов из справочника, они не так важны и используются редко, поэтому нет смысла их описать.

В этой статье мы познакомились со следующими модификаторами:

  • Модификатор g — делает поиск глобальным
  • Модификатор i — делает поиск регистронезависимым.
  • Модификатор m — делает поиск многострочным.
  • Модификатор s — Считает весь текст одной строкой. Он используется по умолчанию.
  • Модификатор x — Не учитывает пробельные знаки.

Понравилась статья?

Тогда поделитесь ею с друзьями и подпишитесь на новые интересные статьи.

Поделиться с друзьями:

Подписаться на новые статьи:

Delivered by FeedBurner

Поддержите пожалуйста мой проект!

<< Предыдущая статьяСледующая статья >>

Если у Вас есть какие-то вопросы или предложения, то можете писать их в комментариях или мне на почту sergiu920@mail.ru. И если Вы заметили какую-то ошибку в статье, то прошу Вас, сообщите мне об этом, и в ближайшее время я всё исправлю.

Добавляйтесь ко мне в друзья в:

Добавляйтесь в мои группы:

Подпишитесь на мои каналы:

Автор статьи: Мунтян Сергей

Копирование материалов с сайта sozdatisite.ru ЗАПРЕЩЕНО!!!

Дата добавления: 2017-03-16 03:28:56