Регулярные выражения -модификаторы (флаги)

Модификаторы регулярных выражений (также называемые модификаторами шаблона или флагами) — это специальные директивы, используемые для изменения поведения сопоставления регулярного выражения.

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

Флаги не записываются внутри регулярного выражения; они размещаются вне выражения, в следующем формате:

/pattern/flags

Общие модификаторы

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

1. i(игнорирование регистра) - Игнорировать регистр

  • Делает сопоставление нечувствительным к регистру

  • Пример:/abc/iМожет совпадать с "abc", "Abc", "ABC" и т. д.

  • Поддерживаемые языки: почти все реализации регулярных выражений (JavaScript, PHP, Python и т. д.)

2. g(глобальный) - Глобальное сопоставление

  • Находить все совпадения, а не останавливаться после первого совпадения

  • Пример: В строке "ababab",/ab/gСовпадает со всеми тремя "ab"

  • Поддерживаемые языки: JavaScript, PHP и т.д.

3. m(multiline) - Многострочный режим

  • Изменяет^и$поведение так, чтобы оно соответствовало началу и концу каждой строки, а не только началу и концу всей строки.

  • Пример: В многострочной строке,/^abc/mСовпадает с "abc" в начале каждой строки

  • Поддерживаемые языки: JavaScript, PHP, Python, Perl и т.д.

4. s(single line/dotall) - Однострочный режим

  • Заставляет точку.соответствовать всем символам, включая символы новой строки

  • В JavaScript он называется режимом "dotall", используя/smodifier

  • Пример:/a.b/sМожет соответствовать "a\nb"

  • Поддерживаемые языки: PHP, Perl, Python (какre.DOTALL)、JavaScript(ES2018+)

5. u(unicode) - режим Unicode

  • Включает полную поддержку Unicode

  • Корректно обрабатывает суррогатные пары UTF-16 и свойства символов Unicode

  • Пример:/\p{Script=Greek}/uМожет сопоставлять греческие буквы

  • Поддерживаемые языки: JavaScript, PHP и т.д.

6. y(sticky) - липкое сопоставление

  • Начинает сопоставление с текущей позиции целевой строки (используяlastIndexсвойство)

  • Похоже на^якорь, но он нацелен на начальную позицию совпадения

  • Пример: В JavaScript,/a/yначнётсяlastIndexсовпадение "a" из

  • Поддерживаемые языки: JavaScript

7. x(extended) - Расширенный режим

  • Игнорирует пробелы и комментарии в шаблоне, делая регулярное выражение более читаемым

  • Пример: В PHP,/a b c/xэквивалентно/abc/

  • Поддерживаемые языки: PHP, Perl, Python (какre.VERBOSE)


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

Модификатор g находит все совпадения в строке:

Пример

Найти "example" в строке:

var str="Google example taobao example"; var n1=str.match(/example/); //Найти первое совпадение var n2=str.match(/example/g); //Найти все совпадения

Попробуйте сами »

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

Модификатор i выполняет сопоставление без учета регистра, пример ниже:

Пример

Найти "example" в строке:

var str="Google example taobao example"; var n1=str.match(/example/g); //С учетом регистра var n2=str.match(/example/gi); //Без учета регистра

Попробуйте сами »

модификатор m

Модификатор m заставляет^и$соответствовать началу и концу каждой строки в тексте.

Если используется только g, сопоставляется только первая строка; после добавления m достигается многострочное сопоставление.

В примере ниже строка использует\nдля переноса строк:

Пример

Найти "example" в строке:

var str="examplegoogle\ntaobao\nexampleweibo"; var n1=str.match(/^example/g); //Одно совпадение var n2=str.match(/^example/gm); //Многострочное совпадение

Попробуйте сами »

модификатор s

По умолчанию точка.соответствует любому символу, кроме символа новой строки\nПосле добавления s,.включает символы новой строки\n。

Пример модификатора s:

Пример

Найти в строке:

var str="google\nexample\ntaobao"; var n1=str.match(/google./); //Без использования s, \n не может быть сопоставлен var n2=str.match(/example./s); //С использованием s, \n сопоставляется

Попробуйте сами »

Расширенные примечания

Дополнительная таблица модификаторов для конкретных языков:

Язык Конкретный модификатор Описание
PHP A Привязывает шаблон к началу строки
D $Соответствует только концу строки (исключая завершающий символ новой строки)
U Инвертирует жадность квантификаторов (делает все квантификаторы нежадными)
Python re.A make\w,\W,\b,\Bи т. д. соответствуют только ASCII-символам
re.L Определяется в соответствии с настройками локали\w,\Wзначение «и т. д.»
JS(ES2022) d Создаёт свойство indices для результатов сопоставления (содержащее начальный и конечный индексы позиций совпадения)

Пример таблицы комбинаций модификаторов:

Комбинация Эффект
gi Глобальное сопоставление + игнорирование регистра (например, найти все формы слова "email")
ims Игнорирование регистра + многострочный режим + точка соответствует символу новой строки (обычно используется при анализе логов)
gu Глобальное сопоставление + поддержка Unicode (например, найти все эмодзи Unicode)

Таблица встроенных модификаторов (в стиле PCRE/Perl):

Синтаксис Область действия Пример
(?i) Включить игнорирование регистра a(?i)bc→ Совпадает с "aBc", "aBC"
(?-i) Отключить игнорирование регистра a(?i)b(?-i)c→ Совпадает только с "aBc"
(?i:...) Действует только внутри круглых скобок a(?i:b)c→ Совпадает с "aBc", "abc"

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

Другие расширения