Введение в регулярные выражения на python, javascript, php, java и на другие языки

Границы слова

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

    — представляет начало слова;

    — представляет конец слова;

    — представляет либо начало, либо конец слова.

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

Слово — это строка, которая состоит из символов, которые включают в себя (т.е. , , и )

Обратите внимание, знаки препинания, такие как апостроф (), не входят в это определение

Классы символов

Квадратные скобки, окружающие шаблон символов, называются классом символов, например . Класс символов всегда соответствует одному символу из списка указанных символов, что означает, что выражение соответствует только символу a, b или c.

Также могут быть определены классы отрицательных символов, которые соответствуют любому символу, кроме указанных в скобках. Класс отрицанных символов определяется путем размещения символа вставки () сразу после открывающей скобки, например , который соответствует любому символу, кроме a, b и c.

Вы также можете определить диапазон символов, используя символ дефиса () внутри класса символов, например . Давайте посмотрим на некоторые примеры классов:

RegExp Что оно делает
Соответствует любому из символов a, b или c.
Соответствует любому одному символу, кроме a, b или c.
Соответствует любому символу от строчной буквы a до строчной буквы z.
Соответствует любому символу от прописных букв A до прописных букв Z.
Соответствует любому символу от строчной буквы a до прописной буквы Z.
Соответствует одной цифре от 0 до 9.
Соответствует одному символу между a и z или между 0 и 9.

В следующем примере показано, как определить, существует ли шаблон в строке или нет, используя регулярное выражение с методом JavaScript :

Кроме того, вы можете добавить к регулярному выражению, чтобы найти все совпадения в строке:

Регулярные выражения не являются исключительными для JavaScript. Такие языки, как Java, Perl, Python, PHP и т. д., используют одинаковые обозначения для поиска шаблонов в тексте.

Функции регулярных выражений в Excel

Для поддержки регулярных выражений при наличии подключенной надстройки !SEMTools в Excel будут работать 3 функции — REGEXMATCH, REGEXEXTRACT и REGEXREPLACE.

Их синтаксис и принцип работы аналогичен синтаксису Google Spreadsheets. Поэтому формулы, составленные в Excel, будут иметь полную зеркальную совместимость с Google Spreadsheets.

REGEXMATCH возвращает Истина или Ложь (TRUE или FALSE в английской версии Excel), в зависимости от того, соответствует текст паттерну или нет.

REGEXEXTRACT извлекает первый попадающий под паттерн фрагмент текста. Небольшое отличие от Google Spreadsheets — если в искомом тексте такого фрагмента нет, Spreadsheets отдают ошибку, а в надстройке отдается пустая строка.

Определение регулярных выражений

В JavaScript регулярные выражения представлены объектом , который является нативным объектом JavaScript, таким как , и так далее. Существует два способа создания нового объекта RegExp: один использует литеральный синтаксис, а другой — конструктор .

Литеральный синтаксис использует косую черту () для переноса шаблона регулярного выражения, тогда как синтаксис конструктора использует кавычки (). В следующем примере демонстрируются оба способа создания регулярного выражения, которое соответствует любой строке, начинающейся с «Mr.».

Как видите, литеральный синтаксис регулярного выражения короче и проще для чтения, поэтому предпочтительно использовать его. Мы также будем использовать его в этом уроке.

При использовании синтаксиса конструктора необходимо дважды экранировать специальные символы; это означает, что для поиска «.» вам нужно написать вместо . Если есть только один обратный слеш, он будет интерпретирован синтаксическим анализатором строк JavaScript как экранирующий символ и будет удален.

Наборы и флаг «u»

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

Например, давайте попробуем найти шаблон в строке :

Результат неверный, потому что по умолчанию регулярные выражения «не знают» о существовании суррогатных пар.

Движок регулярных выражений думает, что – это не два, а четыре символа:

  1. левая половина от ,
  2. правая половина от ,
  3. левая половина от ,
  4. правая половина от .

Мы даже можем вывести их коды:

То есть в нашем примере выше ищется и выводится только левая половина от .

Если добавить флаг , то всё будет в порядке:

Аналогичная ситуация произойдёт при попытке искать диапазон: .

Если мы забудем флаг , то можем нечаянно получить ошибку:

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

При использовании флага шаблон будет работать правильно:

Обратные символьные классы

Для каждого символьного класса существует «обратный класс», обозначаемый той же буквой, но в верхнем регистре.

«Обратный» означает, что он соответствует всем другим символам, например:

Не цифра: любой символ, кроме , например буква.
Не пробел: любой символ, кроме , например буква.
Любой символ, кроме , то есть не буквы из латиницы, не знак подчёркивания и не цифра. В частности, русские буквы принадлежат этому классу.

Мы уже видели, как сделать чисто цифровой номер из строки вида : найти все цифры и соединить их.

Альтернативный, более короткий путь – найти нецифровые символы и удалить их из строки:

Экранирование внутри […]

Обычно, когда мы хотим найти специальный символ, нам нужно экранировать его, например . А если нам нужна обратная косая черта, тогда используем , т.п.

В квадратных скобках большинство специальных символов можно использовать без экранирования:

  • Символы не нужно экранировать никогда.
  • Тире не надо экранировать в начале или в конце (где оно не задаёт диапазон).
  • Символ каретки нужно экранировать только в начале (где он означает исключение).
  • Закрывающую квадратную скобку , если нужен именно такой символ, экранировать нужно.

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

Точка внутри квадратных скобок – просто точка. Шаблон будет искать один из символов: точку или запятую.

В приведённом ниже примере регулярное выражение ищет один из символов :

…Впрочем, если вы решите экранировать «на всякий случай», то не будет никакого вреда:

Разделители¶

Разделители строк

Метасимвол Находит
любой символ в строке, может включать разделители строк
совпадение нулевой длины в начале строки
совпадение нулевой длины в конце строки
совпадение нулевой длины в начале строки
совпадение нулевой длины в конце строки
похож на но совпадает перед разделителем строки, а не сразу после него, как

Примеры:

RegEx Находит
только если он находится в начале строки
, только если он в конце строки
только если это единственная строка в строке
, , и так далее

Метасимвол совпадает с точкой начала строки (нулевой длины). — в конце строки. Если включен , они совпадают с началами или концами строк внутри текста.

Обратите внимание, что в последовательности нет пустой строки. Примечание

Примечание

Если вы используете , то / также соответствует , , , или .

Метасимвол совпадает с точкой нулевой длины в начале строки, — в конце (после символов завершения строки). Модификатор на них не влияет. тоже самое что но совпадает с точкой перед символами завершения строки (LF and CR LF).

Метасимвол по умолчанию соответствует любому символу, но если вы выключите , то не будет совпадать с разделителями строк внутри строки.

Обратите внимание, что выражение не соответствует точке между , потому что это неразрывный разделитель строк. Но оно соответствует пустой строке в последовательности , поэтому из-за неправильного порядка кодов он не воспринимается как разделитель строк и считается просто двумя символами

Примечание

Многострочная обработка может быть настроена с помощью свойств и .

Таким образом, вы можете использовать разделители стиля Unix или стиль DOS / Windows или смешивать их вместе (как описано выше по умолчанию).

Если вы предпочитаете математически правильное описание, вы можете найти его на сайте www.unicode.org.

Извлечение данных из ячеек с помощью RegEx

Извлечь из ячейки содержимое до / после первой цифры включительно

Такие простые два выражения. «+» — это служебный символ-квантификатор. Он обеспечивает «жадный» режим, при котором берутся все удовлетворяющие выражению символы до тех пор, пока на пути не встретится не удовлетворяющий ему, или конец\начало строки. Точка обозначает любой символ, таким образом, берутся любые символы до конца строки, перед которыми есть цифра.

«\d». d обозначает «digits», иначе, цифры. Поскольку квантификатора после \d в примерах выше нет, то одну. Если потребуется исключить из результатов эту цифру, это можно сделать позднее. В !SEMTools есть простые способы удалить символы в начале или конце ячейки.

Цифры можно выразить и другим регулярным выражением:

«Вытянуть» цифры из ячеек

Как извлечь из строки цифры? Регулярное выражение для такой операции будет безумно простым:

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

Если их нужно вывести не сплошной последовательностью, а через разделитель, сохранив фрагменты, где символы следовали друг за другом, выражение будет чуть иным, с «жадным» квантификатором. А при извлечении нужно будет использовать разделитель.

Это справедливо и для любых других символов, пример с числами ниже:

Извлечь из ячейки числа из N цифр

Как видно в примере выше, помимо чисел, обозначающих годы, были извлечены и другие числа, например, 1. Чтобы извлечь исключительно последовательности из 4 цифр, потребуется видоизменить выражение. Есть несколько вариантов:

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


Извлекаем все 4-цифровые последовательности (год) через разделитель

Извлечь латиницу регулярным выражением

Выражение «» обозначает все символы латиницы. Дефис и в этом, и в предыдущем случае обозначает, что берутся все символы между a и z и между A и Z в общей таблице символов Unicode. Квадратные скобки — синоним «ИЛИ». Каждый из элементов или множеств внутри квадратных скобок рассматривается, и выражение не находит ничего, только если сравниваемая строка не содержит ни одного элемента внутри квадратных скобок.


Извлекаем латиницу с помощью регулярных выражений

Извлечь символы в конце/начале строк по условию

Стандартные формулы ПРАВСИМВ и ЛЕВСИМВ позволяют извлечь из ячейки соответственно последние и первые N символов, но на этом их возможности заканчиваются.

С помощью регулярных выражений можно извлечь:

  • символы, идущие после и включая последнюю заглавную букву в ячейке, заканчивающейся на восклицательный знак. Так мы извлечем из ячеек все восклицательные предложения. Выражение — «+!$»
  • первые N выбранных символов из определенного множества, если ячейка с них начинается
  • аналогично, последние N определенных символов, если ячейка на них заканчивается

Флаги регулярных выражений

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

Флаг Описание
i Осуществляется поиск без привязки к регистру. Найдет соответствия в верхнем и нижнем регистрах (D и d).
g Глобальный поиск. Осуществляется поиск всех совпадений, а не только первого.
m Многострочный поиск. Влияет на символы ^ (поиск совпадений в начале строки) и $ (поиск совпадений в конце строки).
y Поиск по заданной позиции в исходной строке.
u Поддержка Unicode.
s Поиск любого символа, включая перенос строки \n.

Флаги в шаблонах регулярных выражений используются с помощью синтаксисов:

var re = /pattern/flags;

или

var re = new RegExp("pattern", "flags");

Флаги указываются после шаблона/паттерна.

Объект RegExp

Объект типа , или, короче, регулярное выражение, можно создать двумя путями

/pattern/флаги
new RegExp("pattern")

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

Первый способ используется часто, второй — иногда. Например, два таких вызова эквивалентны:

var reg = /ab+c/i
var reg = new RegExp("ab+c", "i")

При втором вызове — т.к регулярное выражение в кавычках, то нужно дублировать

// эквивалентны
re = new RegExp("\\w+")
re = /\w+/

При поиске можно использовать большинство возможностей современного PCRE-синтаксиса.

Группы символов

позволяет сопоставить любое число символов один раз, в то время как только символы, не находящиеся в группе.

Если список символов для сопоставления содержит символ дефиса ( ), он должен находиться в начале или в конце списка, чтобы отличать его от выражения диапазона символов.

Диапазоны символов

Шаблон также может быть диапазоном символов. Символы могут быть алфавитными , числовыми или даже основанными на ASCII (все печатные символы).

Числа

Класс символов будет соответствовать любой десятичной цифре. И наоборот, будет соответствовать любой цифре, отличной от десятичной.

Символы слов

Класс символов будет соответствовать любому символу слова . Для соответствия любому символу, не являющемуся буквой, используйте .

подстановочные знаки;

Точка ( ) является символом-шаблоном в регулярных выражениях. Он будет соответствовать любому символу, кроме новой строки ( ).

Пробелы

Пробелы сопоставляются с помощью класса символов. Все символы, отличные от пробельных, сопоставляются с помощью . Также можно использовать символы пространства литерала .

Непечатаемые символы

Помимо наших обычных символов, есть несколько других символов, которые мы не видим, но которые помогают нам в форматировании нашего текста:

   tab — представлен в регулярных выражениях как ;

   возврат каретки — представлен в регулярных выражениях как ;

   перевод строки (или «символ новой строки», «разрыв строки») — представлен в регулярных выражениях как .

С символом табуляции вы должны быть знакомы. Концепции символов возврата каретки и новой строки появились на механических пишущих машинках. Функция возврата каретки перемещает курсор из конца строки в её начало. Перевод строки означает перемещение курсора из текущей строки в новую.

В зависимости от используемой вами ОС, эти символы или их комбинации могут использоваться для обозначения новой строки:

   Windows — используется последовательность ;

   Mac OS (версия 9 и ранее) — используется последовательность ;

   Unix/Linux — используется последовательность .

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

Примечание: и присутствуют в одних реализациях регулярных выражений, но отсутствуют в других. Если вы столкнулись с каким-то непонятным поведением регулярных выражений, то, возможно, причиной этому является нереализованность корректным образом этих сокращений в используемом вами инструменте.

Группирующие скобки (…) и match-объекты в питоне

Match-объекты

Если функции , не находят соответствие шаблону в строке, то они возвращают , функция возващает пустой итератор.
Однако если соответствие найдено, то возвращается -объект.
Эта штука содержит в себе кучу полезной информации о соответствии шаблону.
В отличие от предыдущих функций, возвращает «простой и понятный» список соответствий.
Полный набор атрибутов -объекта можно посмотреть в , а здесь приведём самое полезное.

Метод Описание Пример
Подстрока, соответствующая всему шаблону
Индекс в исходной строке, начиная с которого идёт найденная подстрока
Индекс в исходной строке, который следует сразу за найденной подстрока

Группирующие скобки

Если в шаблоне регулярного выражения встречаются скобки без , то они становятся группирующими.
В match-объекте, который возвращают , и , по каждой такой группе можно получить ту же информацию, что и по всему шаблону. А именно часть подстроки, которая соответствует , а также индексы начала и окончания в исходной строке. Достаточно часто это бывает полезно.

import re
pattern = r'\s*(+)(\d+)\s*'
string = r'---   Опять45   ---'
match = re.search(pattern, string)
print(f'Найдена подстрока >{match.group(0)}< с позиции {match.start(0)} до {match.end(0)}')
print(f'Группа букв >{match.group(1)}< с позиции {match.start(1)} до {match.end(1)}')
print(f'Группа цифр >{match.group(2)}< с позиции {match.start(2)} до {match.end(2)}')
###
# Найдена подстрока >   Опять45   < с позиции 3 до 16
# Группа букв >Опять< с позиции 6 до 11
# Группа цифр >45< с позиции 11 до 13

Тонкости со скобками и нумерацией групп.

Если к группирующим скобкам применён квантификатор (то есть указано число повторений), то подгруппа в match-объекте будет создана только для последнего соответствия.
Например, если бы в примере выше квантификаторы были снаружи от скобок , то вывод был бы таким:

Найдена подстрока >   Опять45   < с позиции 3 до 16
Группа букв >ь< с позиции 10 до 11
Группа цифр >5< с позиции 12 до 13

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

import re
pattern = r'((\d)(\d))((\d)(\d))'
string = r'123456789'
match = re.search(pattern, string)
print(f'Найдена подстрока >{match.group(0)}< с позиции {match.start(0)} до {match.end(0)}')
for i in range(1, match.groups()+1):
    print(f'Группа №{i} >{match.group(i)}< с позиции {match.start(i)} до {match.end(i)}')
###
Найдена подстрока >1234< с позиции 0 до 4
Группа №1 >12< с позиции 0 до 2
Группа №2 >1< с позиции 0 до 1
Группа №3 >2< с позиции 1 до 2
Группа №4 >34< с позиции 2 до 4
Группа №5 >3< с позиции 2 до 3
Группа №6 >4< с позиции 3 до 4

Группы и

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

import re
print(re.findall(r'(+)(\d*)', r'foo3, im12, go, 24buz42'))
# -> 

Группы и

Если в шаблоне нет группирующих скобок, то работает очень похожим образом на .
А вот если группирующие скобки в шаблоне есть, то между каждыми разрезанными строками будут все соответствия каждой из подгрупп.

import re
print(re.split(r'(\s*)([+*/-])(\s*)', r'12  +  13*15   - 6'))
# -> 

Конструкции чередования

Конструкции изменения модифицируют регулярное выражение, включая сопоставление по принципу «либо-либо». Такие конструкции состоят из языковых элементов, приведенных в следующей таблице. Дополнительные сведения см. в разделе Конструкции чередования.

Конструкция изменения Описание Шаблон Число соответствий
Соответствует любому элементу, разделенному вертикальной чертой (). , в
expression yes no Соответствует да в случае соответствия шаблона регулярного выражения, определяемого выражением; в противном случае соответствует дополнительной части нет. Выражение интерпретируется как утверждение нулевой ширины. , в
name yes no Соответствует да в случае соответствия именованной или нумерованной группы захвата имя; в противном случае соответствует дополнительной части нет. , в

Метасимволы

На предыдущем уроке мы рассматривали оператор диапазона (). Это позволило нам указывать набор искомых символов (диапазон). Есть некоторые диапазоны символов, которые используются очень часто, поэтому для них был создан набор метасимволов. Для доступа к ним используется бэкслеш , за которым следует необходимая буква (в этом случае экранирующий символ вводит особое значение, а не убирает его).

    — соответствует всему, что считается пробелом (например: пробел, табуляция, разрыв строки и т.д.);

    — является противоположностью и соответствует любым символам, которые не являются пробелами;

    — соответствует любым цифрам от 0 до 9 (по сути, это сокращение для );

    — является противоположностью и соответствует любым символам, которые не являются цифрами;

    — соответствует любому строковому символу:

Обратите внимание на символ подчеркивания (), он часто используется в именах переменных/функций

    — является противоположностью и соответствует любым символам, которые не являются строковыми символами.

Примечание: Вы уже заметили, что в списке, приведенном выше, выполняемые действия для любой буквы, указанной в верхнем регистре, всегда являются противоположностью тому, что делается для этой же буквы в нижнем регистре?

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

Обратите внимание, в этом примере я использовал бэкслеш для экранирования символа. Этот символ имеет особое значение, о котором мы поговорим чуть позже

Регулярные выражения для поиска конкретных слов в !SEMTools

Извлечь слова по регулярному выражению

Когда дело доходит до извлечения определенных слов, регулярные выражения становятся невероятно сложными. Поэтому надстройка !SEMTools упрощает задачу до применения паттернов RegEx на уровне слов как отдельных сущностей.

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

Обратите внимание, что выражение означает, что цифра за буквой или буква за цифрой должны следовать непосредственно, без промежуточных символов между ними. Если нужно извлечь в том числе слова вида «asdf-13», «1234-d», понадобится обозначить возможность наличия символов между:

Как удалить всё между двумя словами?

<span class=»tag»>&lt;/description&gt;</span>
<span class=»tag»>&lt;sales_notes&gt;</span><span class=»pln»>предоплата</span><span class=»tag»>&lt;/sales_notes&gt;</span>
<span class=»tag»>&lt;param</span> <span class=»atn»>name</span><span class=»pun»>=</span><span class=»atv»>»Тип УЗО»</span><span class=»tag»>&gt;</span><span class=»pln»>Выключатель</span><span class=»tag»>&lt;/param&gt;</span>
<span class=»tag»>&lt;param</span> <span class=»atn»>name</span><span class=»pun»>=</span><span class=»atv»>»Номинальный ток»</span> <span class=»atn»>unit</span><span class=»pun»>=</span><span class=»atv»>»А»</span><span class=»tag»>&gt;</span><span class=»pln»>16.0</span><span class=»tag»>&lt;/param&gt;</span>
<span class=»tag»>&lt;param</span> <span class=»atn»>name</span><span class=»pun»>=</span><span class=»atv»>»Степень защиты IP»</span><span class=»tag»>&gt;</span><span class=»pln»>20</span><span class=»tag»>&lt;/param&gt;</span>
<span class=»tag»>&lt;param</span> <span class=»atn»>name</span><span class=»pun»>=</span><span class=»atv»>»Тип монтажа»</span><span class=»tag»>&gt;</span><span class=»pln»>На DIN рейку</span><span class=»tag»>&lt;/param&gt;</span>
<span class=»tag»>&lt;/offer&gt;</span>

1
2
3
4
5
6
7

<span class=»tag»>&lt;description&gt;<span>

<span class=»tag»>&lt;sales_notes&gt;<span><span class=»pln»>предоплата<span><span class=»tag»>&lt;sales_notes&gt;<span>

<span class=»tag»>&lt;param<span><span class=»atn»>name<span><span class=»pun»>=<span><span class=»atv»>»Тип УЗО»<span><span class=»tag»>&gt;<span><span class=»pln»>Выключатель<span><span class=»tag»>&lt;param&gt;<span>

<span class=»tag»>&lt;param<span><span class=»atn»>name<span><span class=»pun»>=<span><span class=»atv»>»Номинальный ток»<span><span class=»atn»>unit<span><span class=»pun»>=<span><span class=»atv»>»А»<span><span class=»tag»>&gt;<span><span class=»pln»>16.0<span><span class=»tag»>&lt;param&gt;<span>

<span class=»tag»>&lt;param<span><span class=»atn»>name<span><span class=»pun»>=<span><span class=»atv»>»Степень защиты IP»<span><span class=»tag»>&gt;<span><span class=»pln»>20<span><span class=»tag»>&lt;param&gt;<span>

<span class=»tag»>&lt;param<span><span class=»atn»>name<span><span class=»pun»>=<span><span class=»atv»>»Тип монтажа»<span><span class=»tag»>&gt;<span><span class=»pln»>НаDINрейку<span><span class=»tag»>&lt;param&gt;<span>

<span class=»tag»>&lt;offer&gt;<span>

Найти: Заменить на:

  • — любой символ, включая переносы строк, табуляцию и тд.;
  • — «не жадный» режим — минимальное подходящее совпадение;

Как в Notepad++ удалить все строки содержащие слово

В сети много способов удаления в notepad++ всех строк, содержащих определённое слово. Большинство этих способов используют регулярные выражения, что крайне неудобно. Есть способ проще. Повторюсь, что речь идёт не об удалении просто слова, а всех строк, содержащих определённое слово. Дальше — пошаговая инструкция с картинками.

1. В notepad++ в открытом файле нажимаем Ctrl+f и ищем нужное слово во вкладке «Пометки»:2. После этого все строки, содержащие нужное слово, будут помечены. После этого осталось их удалить. Для этого в меню Поиск — Закладки  выбрать пункт «Удалить все строки с закладкой»:

Готово! Проще не придумаешь.

Точка – это любой символ

Точка – это специальный символьный класс, который соответствует «любому символу, кроме новой строки».

Для примера:

Или в середине регулярного выражения:

Обратите внимание, что точка означает «любой символ», но не «отсутствие символа». Там должен быть какой-либо символ, чтобы соответствовать условию поиска:. Обычно точка не соответствует символу новой строки

Обычно точка не соответствует символу новой строки .

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

Но во многих ситуациях точкой мы хотим обозначить действительно «любой символ», включая перевод строки.

Как раз для этого нужен флаг . Если регулярное выражение имеет его, то точка соответствует буквально любому символу:

Внимание, пробелы!

Обычно мы уделяем мало внимания пробелам. Для нас строки и практически идентичны.

Но если регулярное выражение не учитывает пробелы, оно может не сработать.

Давайте попробуем найти цифры, разделённые дефисом:

Исправим это, добавив пробелы в регулярное выражение :

Пробел – это символ. Такой же важный, как любой другой.

Нельзя просто добавить или удалить пробелы из регулярного выражения, и ожидать, что оно будет также работать.

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

Предопределенные классы символов

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

Сокращение Что оно делает
Соответствует любому отдельному символу, кроме новой строки .
Соответствует любому числовому символу. Тоже самое
Соответствует любому нечисловому символу. Тоже самое
Соответствует любому пробельному символу (пробел, табуляция, символ новой строки или символ возврата каретки). Тоже самое
Соответствует любому непробельному символу. Тоже самое
Соответствует любому буквенному символу (определяется как от a до z, от A до Z, от 0 до 9, и подчеркивание). Тоже самое
Соответствует любому несловесному символу. Тоже самое

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: