введение:

Регулярное выражение - это шаблон, описывающий определенный объем текста. В этом руководстве регулярные выражения напечатаны между кайрами: «средний».

  • «medium» - допустимое регулярное выражение, которое соответствует буквальному тексту «medium» в любой заданной строке или тексте.
  • «\ b [A-Z0–9 ._% + -] + @ [A-Z0–9 .-] + \. [AZ] {2,4} \ b »- более сложный шаблон. Он описывает серию букв, цифр, точек, подчеркиваний, знаков процента и дефисов, за которыми следует знак at, за которым следует еще одна серия букв, цифр и дефисов, за которыми, наконец, следует одна точка и от двух до четырех букв. Другими словами: этот шаблон описывает адрес электронной почты.

Простые примеры:

  • Наиболее простое регулярное выражение состоит из одного буквального символа, например: «k». Он будет соответствовать первому вхождению этого символа в строке. Если строка - «Ашока величайший среди всех царей», она будет соответствовать «k» после «o» в 'Asho k a '.
  • Точно так же регулярное выражение «cat» будет соответствовать «cat» в разделе «О кошках и собаках». Это регулярное выражение состоит из трех буквальных символов. Это как сказать механизму регулярных выражений: найдите «c», сразу за которым следует «a», сразу за которым следует «t». Обратите внимание, что механизмы регулярных выражений чувствительны к регистру по умолчанию. «Cat» не соответствует «Cat», если вы не укажете механизму регулярных выражений игнорировать различия в регистре.

→ Символы регулярных выражений:

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

Они есть,

  • Открывающая квадратная скобка «[»
  • Обратная косая черта «\»
  • Каретка «^»
  • Знак доллара «$»
  • Точка или точка «.»
  • Вертикальная черта или вертикальная черта «|»
  • Знак вопроса «?»
  • Звездочка или звездочка «*»
  • Знак плюс «+»
  • Открывающая круглая скобка «(»
  • Закрывающая круглая скобка «)».

Эти специальные символы часто называют «метасимволами».

Чтобы использовать метасимволы в строках регулярных выражений в качестве литералов, необходимо экранировать их обратной косой чертой (\). Если вы хотите сопоставить «1 + 3 = 4», правильное регулярное выражение - «1 \ + 3 = 4». В противном случае знак плюса будет иметь особое значение.

  • Экранирование одного метасимвола с помощью обратной косой черты работает во всех механизмах регулярных выражений.
  • Большинство механизмов регулярных выражений поддерживают escape-последовательность \ Q… \ E. Все символы между \ Q и \ E интерпретируются как буквальные символы. Например. «\ Q * \ d + * \ E» соответствует буквальному тексту «* \ d + *». \ E можно опустить в конце регулярного выражения, поэтому «\ Q * \ d + *» то же самое, что «\ Q * \ d + * \ E».
  • Вы можете включить любой символ в свое регулярное выражение, если вы знаете его шестнадцатеричный код ASCII или ANSI для набора символов, с которым вы работаете. В наборе символов Latin-1 символом авторского права является символ 0xA9. Поэтому для поиска символа авторского права можно использовать «\ xA9».

Примечание.

В исходном коде вы должны помнить, какие символы внутри строк обрабатываются вашим языком программирования в особом порядке. Это потому, что эти символы будут обработаны компилятором до того, как библиотека регулярных выражений увидит строку. Таким образом, регулярное выражение «1 \ + 1 = 2» должно быть записано как «1 \\ + 1 = 2» в языках C ++, Objective-C и Swift. Эти языковые компиляторы превратят экранированную обратную косую черту в исходном коде в одиночную обратную косую черту в строке, которая передается в библиотеку регулярных выражений. Чтобы соответствовать «c: \ temp», вам нужно использовать регулярное выражение «c: \ temp». Как строка в исходном коде вышеупомянутых языков, это регулярное выражение становится «c: \\\\ temp». Четыре обратных косой черты, действительно совпадающие с одной.

→ Механизм регулярных выражений:

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

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

  1. Текстовый движок
  2. Механизм, ориентированный на регулярные выражения, который более популярен, поскольку поддерживает ленивые квантификаторы и обратные ссылки.

Вы можете легко определить, имеет ли вариант регулярного выражения, который вы собираетесь использовать, движок, ориентированный на текст или на регулярное выражение. Если доступны обратные ссылки и / или ленивые квантификаторы, вы можете быть уверены, что движок ориентирован на регулярные выражения. Вы можете выполнить тест, применив регулярное выражение «regex | regex not» к строке «regex not». Если результирующим совпадением является только «регулярное выражение», движок ориентирован на регулярное выражение. Если результатом является «регулярное выражение нет», то он ориентирован на текст. Причина в том, что движок, управляемый регулярными выражениями, «нетерпелив».

Примечание.

Механизм, ориентированный на регулярное выражение, всегда будет возвращать самое левое совпадение, даже если «лучшее» совпадение может быть найдено позже. При применении регулярного выражения к строке движок запускается с первого символа строки. Он будет пробовать все возможные перестановки регулярного выражения для первого символа. Только в том случае, если все возможности были опробованы и оказались безуспешными, машина продолжит работу со вторым символом в тексте. Опять же, он будет пробовать все возможные перестановки регулярного выражения в том же порядке. В результате движок, ориентированный на регулярное выражение, вернет крайнее левое совпадение.

При применении «cat» к «Он поймал сома для своей кошки.», движок попытается сопоставить первый токен в регулярном выражении «c» с первым символом в матче «Н». Это не удается. Других возможных вариантов этого регулярного выражения нет, потому что оно просто состоит из последовательности буквальных символов. Таким образом, механизм регулярных выражений пытается сопоставить «c» с «e». Это тоже не удается, как и сопоставление «c» с пробелом. Достигнув 4-го символа в матче, «c» соответствует «c». Затем движок попытается сопоставить второй токен «a» с пятым символом «a». Это тоже удается. Но тогда «t» не соответствует «p». В этот момент движок знает, что регулярное выражение не может быть сопоставлено, начиная с 4-го символа в сопоставлении. Так что продолжаем с 5-го: «а». И снова «c» здесь не соответствует, и двигатель продолжает работать. На 15-м символе матча «c» снова соответствует «c». Затем движок пытается сопоставить оставшуюся часть регулярного выражения с символом 15 и обнаруживает, что «a» соответствует «a», а «t» соответствует «t».

Все регулярное выражение может быть сопоставлено, начиная с символа 15. Механизм «стремится» сообщить о совпадении. Поэтому первые три буквы слова catfish будут считаться действительными. Двигатель никогда не продвигается дальше этой точки, чтобы увидеть, есть ли «лучшие» совпадения. Первый матч считается достаточно хорошим.

→ Классы символов или наборы символов:

С помощью «класса символов», также называемого «набором символов», вы можете указать механизму регулярных выражений соответствовать только одному из нескольких символов. Просто поместите символы, которые вы хотите сопоставить, в квадратные скобки. Если вы хотите сопоставить a или e, используйте «[ae]».

Вы можете использовать это в «gr [ae] y» для соответствия «серому» или «серому». Класс символов соответствует только одному символу. «Gr [ae] y» не будет соответствовать «graay», «graey» или тому подобному. Порядок символов внутри класса символов не имеет значения. Результаты идентичны.

Вы можете использовать дефис внутри класса символов, чтобы указать диапазон символов. «[0–9]» соответствует одной цифре от 0 до 9. Вы можете использовать более одного диапазона. «[0–9a-fA-F]» соответствует одной шестнадцатеричной цифре без учета регистра. Вы можете комбинировать диапазоны и отдельные символы. «[0–9a-fxA-FX]» соответствует шестнадцатеричной цифре или букве X. Опять же, порядок символов и диапазонов не имеет значения.

Примечание. Обратите внимание, что единственными специальными символами или метасимволами внутри класса символов являются закрывающая скобка (]), обратная косая черта (\), каретка (^) и дефис (-). Обычные метасимволы - это обычные символы внутри класса символов, и их не нужно экранировать обратной косой чертой.

→ Отрицательные классы символов:

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

Важно помнить, что отрицаемый класс символов по-прежнему должен соответствовать символу. «Q [^ u]» не означает: «q, за которым не следует u». Это означает: «q, за которым следует символ, не являющийся u». Он не будет соответствовать q в строке «Ирак». Он будет соответствовать q и пробелу после q в фразе «Ирак - страна». В самом деле: пробел будет частью общего совпадения, потому что это «символ, который не является u», которому соответствует инвертированный символьный класс в приведенном выше регулярном выражении.

Обратите внимание, что единственными специальными символами или метасимволами внутри класса символов являются закрывающая скобка (]), обратная косая черта (\), каретка (^) и дефис (-). Обычные метасимволы - это обычные символы внутри класса символов, и их не нужно экранировать обратной косой чертой. Для поиска звезды или плюса используйте «[+ *]». Ваше регулярное выражение будет работать нормально, если вы избегаете обычных метасимволов внутри класса символов, но это значительно снижает удобочитаемость.

Чтобы включить обратную косую черту в качестве символа без какого-либо особого значения внутри класса символов, вы должны экранировать ее с помощью другой обратной косой черты. «[\\ x]» соответствует обратной косой черте или x. Закрывающую скобку (]), каретку (^) и дефис (-) можно включить, закрыв их обратной косой чертой или поместив их в положение, в котором они не принимают своего особого значения. Я рекомендую второй метод, так как он улучшает читаемость. Чтобы включить курсор, поместите его где угодно, кроме сразу после открывающей скобки. «[X ^]» соответствует x или каретке. Вы можете поставить закрывающую скобку сразу после открывающей скобки или отрицательной вставки. «[] X]» соответствует закрывающей скобке или x. «[^] X]» соответствует любому символу, кроме закрывающей скобки или x.

→ Сокращенные классы символов:

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

  • «\ D» - это сокращение от «[0-9]».
  • «\ W» означает «словесный символ». Точные символы, которые он соответствует, различаются в зависимости от типа регулярного выражения. Во всех вариантах он будет включать «[A-Za- z]».

Сокращенные классы символов могут использоваться как внутри, так и вне квадратных скобок. «\ S \ d» соответствует пробельному символу, за которым следует цифра. «[\ S \ d]» соответствует одиночному символу, который является либо пробелом, либо цифрой. Применительно к «1 + 2 = 3» первое регулярное выражение будет соответствовать «2» (пробел два), а второе - «1» (единицу).

→ Отрицательные классы сокращенных символов:

Вышеупомянутые сокращения также имеют инвертированные версии.

«\ D» - это то же самое, что «[^ \ d]»

«\ W» - это сокращение от «[^ \ w]»

и «\ S» эквивалентно «[^ \ s]».

Нам нужно быть осторожными при использовании инвертированных сокращений внутри квадратных скобок. «[\ D \ S]» не то же самое, что «[^ \ d \ s]». Последний будет соответствовать любому символу, кроме цифры или пробела. Таким образом, он будет соответствовать «x», но не «8». Первый, однако, будет соответствовать любому символу, который либо не является цифрой, либо не является пробелом. Поскольку цифра не является пробелом, а пробел не является цифрой, «[\ D \ S]» будет соответствовать любому символу, цифре, пробелу и т. Д.

→ Классы повторяющихся символов:

Если вы повторяете класс символов с помощью операторов «?», «*» Или «+», вы будете повторять весь класс символов, а не только соответствующий ему символ. Регулярное выражение «[0–9] +» может соответствовать «837», а также «222».

Если вы хотите повторить совпадающий символ, а не класс, вам нужно будет использовать обратные ссылки. «([0- 9]) \ 1+» будет соответствовать «222», но не «837». При применении к строке «833337» он будет соответствовать «3333» в середине этой строки.

— — — — — — — — — *********************** — — — — — — — — —

вы можете связаться со мной / подписаться на меня в учетных записях twitter и connectedIn.

Спасибо за чтение…

****************************!!!Увидимся!!!************** **************