Работа с оболочкой (регулярные выражения, ||, &&)

fgh's picture

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

Заходим на сайт https://regex101.com/
Шаблон регулярного выражения пишем в поле REGULAR EXPRESSION
Набор слов и символов пишем в cледующей строке.

Пример 1

  • Например, надо из набора слов и символов : AFG AFG AFG BFG bFGrth RHHJ rhrthjrtyj отфильтровать все слова с вхождением FG.
  • Для этого пишем шаблон : [A,B]FG
  • Всего компьютер посчитает пять вхождений. Потому что: AFG AFG BFG BFG ABFG bFGrth RHHJ rhrthjrtyj .
  • Если после FG есть даже один символ этот набор символов уже не посчитается. Если пишется ABFG , то компьютер считает только BFG
  • Регулярное выражение [A,B]FG читаем так: на первой позици должно обязательно присутсвовать или А или B, а после обязательно должно присутствовать FG.

Пример 2

  • Шаблон: [abc123]
  • Текст: abc123
  • Компьютер отфильтрует 6 совпадений. Не одно совпадение, а шесть, так как каждый символ считается отдельно.
  • Текст: ac3e
  • Компьютер отфильтрует 3 совпадения - a, c, 3

Пример 3

  • Шаблон: [^p] - все символы на первой позиции кроме p.
  • Текст: p
  • Компьютер отфильтрует 0 совпадений. Так один символ это и есть первый символ.
  • Текст: ppp
  • Компьютер отфильтрует 0 совпадений так же.
  • Текст: p pp - после первого символа p есть пробел.
  • Компьютер отфильтрует одно совпадение.

Пример 4

  • Шаблон: [a-z]fgb - все символы от a до z на первой позиции.
  • Текст: afgb fgb xfgb sfgb tghj
  • Компьютер отфильтрует три совпадение. Пробел символом из диапазона компьютер не посчитает.

Пример 5

  • Шаблон: [a-zA-Z]fgb - все символы от a до z на первой позиции включая верхний регистр.
  • Текст: afgb fgb xfgb sfgb tghj Sfgb Zfgb
  • Компьютер отфильтрует пять совпадений. Пробел символом из диапазона компьютер не посчитает.

Пример 6

  • Шаблон: [123456789]fgb - все символы от a до z на первой позиции включая верхний регистр.
  • Текст: 1fgb fgb 2fgb 3fgb 5tghj Sfgb Zfgb
  • Компьютер отфильтрует три совпадения. Тот же результат компьютер посчитает если шаблон записать так [1-9]fgb

Пример 7

  • Простая валидация (проверка введенных данных пользователем) формы. Пользователь вводит 11 цифр мобильного телефона, с помощью регулярных выражений компьютер посчитает введенные данные, если пользователь ввел например 8 цифр компьютер не посчитает введенные данные.
  • Шаблон: [1-9][1-9][1-9][1-9][1-9][1-9][1-9][1-9][1-9][1-9][1-9] - все цифры от 1 до 9 на первой , второй и до одинадцатой позиции расположения символа
  • Текст: 81111111111 567 64765787
  • Компьютер отфильтрует одно совпадения. Тот же результат компьютер посчитает если шаблон записать так [1-9]fgb

Пример 8

  • Предыдущий пример показывает шаблон, состоящий из 11 повторений выражения [1-9]. Можно заменить эти повторения на выражение [1-9]+, что означает любые цифры от 1 до 9 и повторять на первой позиции до бесконечности
  • Шаблон: [1-9]+ -все цифры от 1 до 9 на первой , второй, третьей... бесконечной позиции
  • Текст: 81111111111567 64765787 242343
  • Компьютер отфильтрует три совпадения, позиции мы считаем от первого символа или от первого символа после пробела

Пример 9

  • В предыдущем примере поменяем регулярное выражение [1-9]+ на [1-9]{11} что означает любые цифры от 1 до 9 и повторять на первой позиции до бесконечности
  • Шаблон: [1-9]+ -все цифры от 1 до 9 на первой , второй, третьей... бесконечной позиции
  • Текст: 81111111111567 64765787 242343
  • Компьютер отфильтрует одно совпадение, позиции мы считаем от первого символа или от первого символа после пробела

Пример 10

  • Запишем регулярное выражение [a-z]{5} что означает любые буквы нижнего регистра от а до z, которые располагаются от первой позиции до пятой позиции в слове включительно
  • Шаблон: [a-z]{5}
  • Текст: eryht re rety ryert rtgr eyukyuhy
  • Компьютер отфильтрует три совпадения, позиции мы считаем от первого символа или от первого символа после пробела

Пример 11

  • Запишем регулярное выражение [a-z]{5,8} что означает любые буквы нижнего регистра от а до z, которые располагаются от пятой позиции до восьмой позиции в слове включительно
  • Шаблон: [a-z]{5,8}
  • Текст: ytuju tyjyjyjy ytjyjyjyj
  • Компьютер отфильтрует три совпадения, позиции мы считаем только те слова, которые содержат от пяти символов до восьми символов.

Пример 12

  • Запишем регулярное выражение [a-z]{5,} что означает любые буквы нижнего регистра от а до z, которые располагаются от пятой позиции до бесконечности в слове включительно
  • Шаблон: [a-z]{5,}
  • Текст: ytuju tyjyjyjy ytjyjyjyj
  • Компьютер отфильтрует три совпадения, позиции мы считаем только те слова, которые содержат от пяти символов до бесконечного количества символов.

Метасимволы

\d - любой цифровой символ от 0 до 9, аналогичен записи регярного выражению [0-9]. Буква d является первой буквой слова digit и переводится, как цифра.
\w - буквенно цифровой символ от (a-z, A-Z,0-9 и "_"), то есть все буквы нижнего регистра, верхнего регистра, все цифры от 0 до 9 и символнижнего подчеркивания
\s - любой пробельный символ (пробелы, табы, энтер и т.п.)
\t - только символ табуляции

При этом запись просто d это просто буква d, а запись с бэкслешем \d это метасимвол

Пример 13

  • Запишем регулярное выражение \s что означает любые пробелы, табы и enterы
  • Шаблон:\s
  • Текст: жмём tab один раз, потом жмём пробел один раз и жмём enter один раз
  • Компьютер отфильтрует три совпадения

Проверьте на сайте https://regex101.com/

Пример 14

  • Запишем регулярное выражение \d\s\w
  • Шаблон:\d\s\w
  • Текст: набираем цифру 1, потом жмём tab один раз, потом набираем букву s
  • Компьютер отфильтрует одно совпадение. Если мы сначала нажмем tab потом напишем цифру 1, а потом напечатаем букву s то компьютер не отфильтрует ни одного совпадения. Поэтому при написании текста отфильтровываются те символы текста, которые располагаются в том же порядке в каком записано регулярное выраженине.

Пример 15

  • Запишем регулярное выражение \d{3}\s\w{5}. Оно означает что компьютер отфильтрует только те наборы символов, которые содержат в себе по порядку : 1) на первых трех позициях только цифры от 0 до 9 ; 2) потом пробели или enter или tab; 3) потом 5 букв разного регистра от a до z, цифры от 0 до 9 или символ нижнего подчеркивания
  • Шаблон:\d{3}\s\w{5}
  • Текст: набираем цифры 123, потом жмём tab один раз, потом набираем пять букв hytjs
  • Компьютер отфильтрует одно совпадение.

Особые символы

+ - совпадения встречаются один и более раз
\ - символ перехода escape символ
[] - набор символов
[^] - cимвол отрицания в наборе символов
? ноль или одно совпадение (делает предшествующий символ опциональным/необязательным другими словами этот символ может присутствовать а может и нет)
. абсолютно любой символ (кроме символа новой строки)
* совпадения встречается ноль или более раз (схож с +)

Пример 16

  • Запишем регулярное выражение hello?
  • Шаблон: hello?
  • Текст: hello helly helltrt
  • Компьютер отфильтрует три совпадения.

Пример 17

  • Запишем регулярное выражение he?llo?
  • Шаблон: hello?
  • Текст: hllo helly hlltrt hrlltrt
  • Компьютер отфильтрует три совпадения. Слово hrlltrt после символа h содержит букву r это означает, что компьютер не посчитает это слово.

"." - любой одиночеый символ
"[a-d]" - любой из них (a,b,c,d)
"$" - конец строки
"^" - начало строки
"\" - экранирование
"[^b]" - найдет не b
"\d" или "[0-9]" -все числа
\D - всё что угодно, кроме чисел
\s - пробел
\S все кроме пробела
\w - любая буква
\W - всё кроме буквы
\b - граница слова
\B - всё кроме границы
g глобальное
i - игнорирование регистра при сопоставлении
n{4} - искать n 4 раза
n{4,6} - искать n от 4 до 6
* - от нуля и выше
+ от 1 и выше
? либо 0 или 1 раз

\d{4}(\s|-) d{4} 4444-444 or 4444 4444

Источники:
1) Курс уроков 16 видео о регулярных выражениях

2) https://regex101.com/