Регулярное выражение проверки на число
От автора: приветствую вас, друзья. В этой статье мы уже непосредственно начнем изучать возможности регулярных выражений, познакомимся с функцией preg_match() в PHP, а также составим первое регулярное выражение проверки на число.
Начать статью, пожалуй, стоит с того, что регулярные выражения — это очень мощное средство для работы с текстом. Как вы уже знаете, с помощью регулярных выражений мы можем отыскать в массиве текста буквально что угодно. Однако злоупотреблять такой мощью не стоит. Не забывайте о том, что PHP предлагает нам массу функций для работы со строками, типами и так далее, которые позволяют проверить, скажем, наличие определенного символа или подстроки в строке.
Поэтому, если есть возможность решить задачу без привлечения регулярных выражений, тогда стоит использовать эту возможность, поскольку функции для работы с регулярными выражениями, как правило, более ресурсоемки. В данном случае задачу можно решить и без регулярных выражений. Например, проверить являются ли все символы в строке числовыми можно с помощью функции ctype_digit().
Но по условиям поставленной в статье задачи нам необходимо использовать регулярные выражения, поэтому решим поставленную задачу, используя функцию preg_match(). Данная функция проверяет строку на соответствие шаблону регулярного выражения. Функция имеет 5 параметров, из которых на практике практически всегда используются только первые 2.
Первый параметр функции будет шаблоном регулярного выражения. Второй — проверяемая строка. Иногда может понадобится третий параметр, указав который мы получим массив с результатами поиска.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Получить курс сейчас!
Давайте же составим свой первый шаблон. Выглядеть он может следующим образом:
На первый взгляд может выглядеть непонятно и несколько пугающе. [0-9]+$#’;
foreach($arr as $item){
if( preg_match($pattern, $item) ){
echo «<p>Строка <b>$item</b> содержит только цифры</p>»;
}else{
echo «<p>Строка <b>$item</b> не подходит</p>»;
}
}
В результате мы увидим то, что и предполагали:
Как видим, все работает отлично! На этом мы будем завершать данную статью. Напоминаю, что больше о регулярных выражениях вы можете узнать из нашего курса по регулярным выражениям. Удачи!
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Получить курс сейчас!
Хотите изучить регулярные выражения на PHP?
Посмотрите 12-ти часовой видео курс по регулярным выражениям на PHP!
Смотреть
Модуль Python Re на примерах + задания и шаблоны ~ PythonRu
Регулярные выражения, также называемые regex, синтаксис или, скорее, язык для поиска, извлечения и работы с определенными текстовыми шаблонами большего текста. Он широко используется в проектах, которые включают проверку текста, NLP (Обработка естественного языка) и интеллектуальную обработку текста.
Введение в регулярные выражения
Регулярные выражения, также называемые regex, используются практически во всех языках программирования. В python они реализованы в стандартном модуле re
.
Он широко используется в естественной обработке языка, веб-приложениях, требующих проверки ввода текста (например, адреса электронной почты) и почти во всех проектах в области анализа данных, которые включают в себя интеллектуальную обработку текста.
Эта статья разделена на 2 части.
Прежде чем перейти к синтаксису регулярных выражений, для начала вам лучше понять, как работает модуль re
.
Итак, сначала вы познакомитесь с 5 основными функциями модуля re
, а затем посмотрите, как создавать регулярные выражения в python.
Узнаете, как построить практически любой текстовый шаблон, который вам, скорее всего, понадобится при работе над проектами, связанными с поиском текста.
Что такое шаблон регулярного выражения и как его скомпилировать?
Шаблон регулярного выражения представляет собой специальный язык, используемый для представления общего текста, цифр или символов, извлечения текстов, соответствующих этому шаблону.
Основным примером является \s+
.
Здесь \ s
соответствует любому символу пробела. Добавив в конце оператор +
, шаблон будет иметь не менее 1 или более пробелов. Этот шаблон будет соответствовать даже символам tab \t
.
В конце этой статьи вы найдете больший список шаблонов регулярных выражений. Но прежде чем дойти до этого, давайте посмотрим, как компилировать и работать с регулярными выражениями.
>>> import re
>>> regex = re.compile('\s+')
Вышеупомянутый код импортирует модуль re
и компилирует шаблон регулярного выражения, который соответствует хотя бы одному или нескольким символам пробела.
Как разбить строку, разделенную регулярным выражением?
Рассмотрим следующий фрагмент текста.
>>> text = """100 ИНФ Информатика
213 МАТ Математика
156 АНГ Английский"""
У меня есть три курса в формате “[Номер курса] [Код курса] [Название курса]”. Интервал между словами разный.
Передо мной стоит задача разбить эти три предмета курса на отдельные единицы чисел и слов. Как это сделать?
Их можно разбить двумя способами:
- Используя метод
re.split
. - Вызвав метод
split
для объектаregex
.
>>> re.split('\s+', text)
>>> regex.split(text)
['100', 'ИНФ', 'Информатика', '213', 'МАТ', 'Математика', '156', 'АНГ', 'Английский']
Оба эти метода работают. Но какой же следует использовать на практике?
Если вы намерены использовать определенный шаблон несколько раз, вам лучше скомпилировать регулярное выражение, а не использовать re. split
множество раз.
Поиск совпадений с использованием findall, search и match
Предположим, вы хотите извлечь все номера курсов, то есть 100, 213 и 156 из приведенного выше текста. Как это сделать?
Что делает re.findall()?
>>> print(text)
100 ИНФ Информатика
213 МАТ Математика
156 АНГ Английский
>>> regex_num = re.compile('\d+')
>>> regex_num.findall(text)
['100', '213', '156']
В приведенном выше коде специальный символ \ d
является регулярным выражением, которое соответствует любой цифре. В этой статье вы узнаете больше о таких шаблонах.
Добавление к нему символа +
означает наличие по крайней мере 1 числа.
Подобно +
, есть символ *
, для которого требуется 0 или более чисел. Это делает наличие цифры не обязательным, чтобы получилось совпадение. Подробнее об этом позже.
В итоге, метод findall
извлекает все вхождения 1 или более номеров из текста и возвращает их в список.
re.search() против re.match()
Как понятно из названия, regex.search()
ищет шаблоны в заданном тексте.
Но, в отличие от findall
, который возвращает согласованные части текста в виде списка, regex.search()
возвращает конкретный объект соответствия. Он содержит первый и последний индекс первого соответствия шаблону.
Аналогично, regex.match()
также возвращает объект соответствия. Но разница в том, что он требует, чтобы шаблон находился в начале самого текста.
>>>
>>> text2 = """ИНФ Информатика
213 МАТ Математика 156"""
>>>
>>> regex_num = re.compile('\d+')
>>> s = regex_num.search(text2)
>>> print('Первый индекс: ', s.start())
>>> print('Последний индекс: ', s.end())
>>> print(text2[s.start():s.end()])
Первый индекс: 17
Последний индекс: 20
213
В качестве альтернативы вы можете получить тот же результат, используя метод group()
для объекта соответствия.
>>> print(s.group())
205
>>> m = regex_num.match(text2)
>>> print(m)
None
Как заменить один текст на другой, используя регулярные выражения?
Для изменения текста, используйте regex.sub()
.
Рассмотрим следующую измененную версию текста курсов. Здесь добавлена табуляция после каждого кода курса.
>>> text = """100 ИНФ \t Информатика
213 МАТ \t Математика
156 АНГ \t Английский"""
>>> print(text)
100 ИНФ Информатика
213 МАТ Математика
156 АНГ Английский
Из вышеприведенного текста я хочу удалить все лишние пробелы и записать все слова в одну строку.
Для этого нужно просто использовать regex.sub
для замены шаблона \s+
на один пробел .
>>> regex = re.compile('\s+')
>>> print(regex. sub(' ', text))
или
>>> print(re.sub('\s+', ' ', text))
101 COM Computers 205 MAT Mathematics 189 ENG English
Предположим, вы хотите избавиться от лишних пробелов и выводить записи курса с новой строки. Чтобы это сделать, используйте регулярное выражение, которое пропускает символ новой строки, но учитывает все другие пробелы.
Это можно сделать, используя отрицательное соответствие (?!\n)
. Шаблон проверяет наличие символа новой строки, в python это \n
, и пропускает его.
>>> regex = re.compile('((?!\n)\s+)')
>>> print(regex.sub(' ', text))
100 ИНФ Информатика
213 МАТ Математика
156 АНГ Английский
Группы регулярных выражений
Группы регулярных выражений — функция, позволяющая извлекать нужные объекты соответствия как отдельные элементы.
Предположим, что я хочу извлечь номер курса, код и имя как отдельные элементы. Не имея групп мне придется написать что-то вроде этого.
>>> text = """100 ИНФ Информатика
213 МАТ Математика
156 АНГ Английский"""
>>> re.findall('[0-9]+', text)
>>> re.findall('[А-ЯЁ]{3}', text)
>>> re.findall('[а-яА-ЯёЁ]{4,}', text)
['100', '213', '156']
['ИНФ', 'МАТ', 'АНГ']
['Информатика', 'Математика', 'Английский']
Давайте посмотрим, что получилось.
Я скомпилировал 3 отдельных регулярных выражения по одному для соответствия номерам курса, коду и названию.
Для номера курса, шаблон [0-9]+
указывает на соответствие всем числам от 0 до 9. Добавление символа +
в конце заставляет найти по крайней мере 1 соответствие цифрам 0-9. Если вы уверены, что номер курса, будет иметь ровно 3 цифры, шаблон мог бы быть [0-9] {3}
.
Для кода курса, как вы могли догадаться, [А-ЯЁ]{3}
будет совпадать с 3 большими буквами алфавита А-Я подряд (буква “ё” не включена в общий диапазон букв).
Для названий курса, [а-яА-ЯёЁ]{4,}
будем искать а-я верхнего и нижнего регистра, предполагая, что имена всех курсов будут иметь как минимум 4 символа.
Можете ли вы догадаться, каков будет шаблон, если максимальный предел символов в названии курса, скажем, 20?
Теперь мне нужно написать 3 отдельные строки, чтобы разделить предметы. Но есть лучший способ. Группы регулярных выражений.
Поскольку все записи имеют один и тот же шаблон, вы можете создать единый шаблон для всех записей курса и внести данные, которые хотите извлечь из пары скобок ().
>>> course_pattern = '([0-9]+)\s*([А-ЯЁ]{3})\s*([а-яА-ЯёЁ]{4,})'
>>> re.findall(course_pattern, text)
[('100', 'ИНФ', 'Информатика'), ('213', 'МАТ', 'Математика'), ('156', 'АНГ', 'Английский')]
Обратите внимание на шаблон номера курса: [0-9]+
, код: [А-ЯЁ]{3}
и название: [а-яА-ЯёЁ]{4,}
они все помещены в круглую скобку (), для формирования группы.
Что такое “жадное” соответствие в регулярных выражениях?
По умолчанию, регулярные выражения должны быть жадными. Это означает, что они пытаются извлечь как можно больше, пока соответствуют шаблону, даже если требуется меньше.
Давайте рассмотрим пример фрагмента HTML, где нам необходимо получить тэг HTML.
>>> text = "<body>Пример жадного соответствия регулярных выражений</body>"
>>> re.findall('<.*>', text)
['<body>Пример жадного соответствия регулярных выражений</body>']
Вместо совпадения до первого появления ‘>’, которое, должно было произойти в конце первого тэга тела, он извлек всю строку. Это по умолчанию “жадное” соответствие, присущее регулярным выражениям.
С другой стороны, ленивое соответствие “берет как можно меньше”. Это можно задать добавлением ?
в конец шаблона.
>>> re.findall('<.*?>', text)
['<body>', '</body>']
Если вы хотите получить только первое совпадение, используйте вместо этого метод поиска search
.
re.search('<.*?>', text).group()
'<body>'
Наиболее распространенный синтаксис и шаблоны регулярных выражений
Теперь, когда вы знаете как пользоваться модулем re, давайте рассмотрим некоторые обычно используемые шаблоны подстановок.
Основной синтаксис
. | Один символ кроме новой строки |
\. | Просто точка . , обратный слеш \ убирает магию всех специальных символов. |
\d | Одна цифра |
\D | Один символ кроме цифры |
\w | Один буквенный символ, включая цифры |
\W | Один символ кроме буквы и цифры |
\s | Один пробельный (включая таб и перенос строки) |
\S | Один не пробельный символ |
\b | Границы слова |
\n | Новая строка |
\t | Табуляция |
Модификаторы
$ | Конец строки | |
^ | Начало строки | |
ab|cd | Соответствует ab или de. ab-d] | Любой символ, кроме: a, b, c, d |
() | Извлечение элементов в скобках | |
(a(bc)) | Извлечение элементов в скобках второго уровня |
Повторы
[ab]{2} | 2 непрерывных появления a или b |
[ab]{2,5} | от 2 до 5 непрерывных появления a или b |
[ab]{2,} | 2 и больше непрерывных появления a или b |
+ | одно или больше |
* | 0 или больше |
? | 0 или 1 |
Примеры регулярных выражений
Любой символ кроме новой строки
>>> text = 'python.org'
>>> print(re.findall('.', text))
['p', 'y', 't', 'h', 'o', 'n', '.', 'o', 'r', 'g']
>>> print(re.findall('...', text))
['pyt', 'hon', '.or']
Точки в строке
>>>text = 'python. \.]', text))
['p', 'y', 't', 'h', 'o', 'n', 'o', 'r', 'g']
Любая цифра
>>> text = '01, Янв 2018'
>>> print(re.findall('\d+', text))
['01', '2018']
Все, кроме цифры
>>> text = '01, Янв 2018'
>>> print(re.findall('\D+', text))
[', Янв ']
Любая буква или цифра
>>> text = '01, Янв 2018'
>>> print(re.findall('\w+', text))
['01', 'Янв', '2018']
Все, кроме букв и цифр
>>> text = '01, Янв 2018'
>>> print(re.findall('\W+', text))
[', ', ' ']
Только буквы
>>> text = '01, Янв 2018'
>>> print(re.findall('[а-яА-ЯёЁ]+', text))
['Янв']
Соответствие заданное количество раз
>>> text = '01, Янв 2018'
>>> print(re. findall('\d{4}', text))
['2018']
>>> print(re.findall('\d{2,4}', text))
['01', '2018']
1 и более вхождений
>>> print(re.findall(r'Co+l', 'So Cooool'))
['Cooool']
Любое количество вхождений (0 или более раз)
>>> print(re.findall(r'Pi*lani', 'Pilani'))
['Pilani']
0 или 1 вхождение
>>> print(re.findall(r'colou?r', 'color'))
['color']
Граница слова
Границы слов \b
обычно используются для обнаружения и сопоставления началу или концу слова. То есть, одна сторона является символом слова, а другая сторона является пробелом и наоборот.
Например, регулярное выражение \btoy
совпадает с ‘toy’ в ‘toy cat’, но не в ‘tolstoy’. Для того, чтобы ‘toy’ соответствовало ‘tolstoy’, используйте toy\b
.
Можете ли вы придумать регулярное выражение, которое будет соответствовать только первой ‘toy’в ‘play toy broke toys’? (подсказка: \ b
с обеих сторон)
Аналогично, \ B
будет соответствовать любому non-boundary( без границ).
Например, \ Btoy \ B
будет соответствовать ‘toy’, окруженной словами с обеих сторон, как в ‘antoynet’.
>>> re.findall(r'\btoy\b', 'play toy broke toys')
['toy']
Практические упражнения
Давайте немного попрактикуемся. Пришло время открыть вашу консоль. (Варианты ответов здесь)
1. Извлеките никнейм пользователя, имя домена и суффикс из данных email адресов.
emails = """[email protected]
[email protected]
[email protected]"""
[('zuck26', 'facebook', 'com'), ('page33', 'google', 'com'), ('jeff42', 'amazon', 'com')]
2. Извлеките все слова, начинающиеся с ‘b’ или ‘B’ из данного текста.
text = """Betty bought a bit of butter, But the butter was so bitter, So she bought some better butter, To make the bitter butter better."""
['Betty', 'bought', 'bit', 'butter', 'But', 'butter', 'bitter', 'bought', 'better', 'butter', 'bitter', 'butter', 'better']
3. Уберите все символы пунктуации из предложения
sentence = """A, very very; irregular_sentence"""
A very very irregular sentence
4. Очистите следующий твит, чтобы он содержал только одно сообщение пользователя. То есть, удалите все URL, хэштеги, упоминания, пунктуацию, RT и CC.
tweet = '''Good advice! RT @TheNextWeb: What I would do differently if I was learning to code today https://t.co/lbwej0pxOd cc: @garybernhardt #rstats'''
'Good advice What I would do differently if I was learning to code today'
- Извлеките все текстовые фрагменты между тегами с HTML страницы: https://raw. githubusercontent.com/selva86/datasets/master/sample.html
Код для извлечения HTML страницы:
import requests
r = requests.get("https://raw.githubusercontent.com/selva86/datasets/master/sample.html")
r.text
['Your Title Here', 'Link Name', 'This is a Header', 'This is a Medium Header', 'This is a new paragraph! ', 'This is a another paragraph!', 'This is a new sentence without a paragraph break, in bold italics.']
Ответы
>>> pattern = r'(\w+)@([A-Z0-9]+)\.([A-Z]{2,4})'
>>> re.findall(pattern, emails, flags=re.IGNORECASE)
[('zuck26', 'facebook', 'com'), ('page33', 'google', 'com'), ('jeff42', 'amazon', 'com')]
Есть больше шаблонов для извлечения домена и суфикса. Это лишь один из них.
>>> import re
>>> re.findall(r'\bB\w+', text, flags=re.IGNORECASE)
['Betty', 'bought', 'bit', 'butter', 'But', 'butter', 'bitter', 'bought', 'better', 'butter', 'bitter', 'butter', 'better']
\b
находится слева от ‘B’, значит слово должно начинаться на ‘B’. _`{|}~»»»), », tweet)
tweet = re.sub(‘\s+’, ‘ ‘, tweet)
return tweet
>>> print(clean_tweet(tweet))
‘Good advice What I would do differently if I was learning to code today’
>>> re.findall('<.*?>(.*)</.*?>', r.text)
['Your Title Here', 'Link Name', 'This is a Header', 'This is a Medium Header', 'This is a new paragraph! ', 'This is a another paragraph!', 'This is a new sentence without a paragraph break, in bold italics.']
Надеемся, информация была вам полезна. Стояла цель — познакомить вас с примерами регулярных выражений легким и доступным для запоминания способом.
4 регулярных выражения, которые стоит знать
Регулярные выражения (RegEx или RegExp) исключительно полезны для извлечения информации из текста посредством поиска совпадения (или нескольких совпадений) со специальными поисковыми шаблонами. Эти шаблоны представляют собой последовательности символов ASCII или Unicode. The end$ — точное строковое соответствие (при помощи такого шаблона можно найти строку «The end»).
Квантификаторы — *
+
?
и {}
Пример. Есть несколько групп символов:
abc ab acb aob a2b a42_c abccc
abc*
— соответствует строке, в которой есть сочетание букв ab, за которым (возможно) есть один или несколько символов c.
abc+
— соответствует строке, в которой есть ab, за которым есть один или несколько символов c.
abc?
— соответствует строке, в которой есть ab, за которым (возможно) есть один символ c.
abc{2}
-соответствует строке, в которой есть ab, за которым есть два символа c.
abc{2,}
— соответствует строке, в которой есть ab, за которым есть два или более символов c.
abc{2,5}
— соответствует строке, в которой есть ab, за которым есть от двух до пяти символов c.
a(bc)*
— соответствует строке, в которой есть символ a, за которым (возможно) есть одна или несколько последовательностей bc.
a(bc){2,5}
— соответствует строке, в которой есть символ a, за которым есть от 2 до 5 копий последовательности bc.
Скобочные выражения — []
Пример. Есть несколько групп символов:
abc ab acb aob a2b a42_c abccc
[abc]
— соответствует строке, в которой есть либо a, либо b, либо c. Аналогично шаблону a|b|c
.
[a-c]
— то же самое, что и в предыдущем случае.([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
Описание:
Вначале мы даем указание парсеру искать начало строки. Внутри первой группы мы проверяем соответствие одного или более символов букв в нижнем регистре, чисел, нижних подчеркиваний, точек или дефисов. Знак точки мы экранировали, так как иначе он обозначает любой символ. Непосредственно после этого должен быть символ @
.Затем идет имя домена: один или более символов букв в нижнем регистре, чисел, нижних подчеркиваний, точек или дефисов. Затем еще одна (экранированная) точка и после нее расширение, состоящее из букв и точек в количестве от 2 до 6. Мы взяли такое количество, потому что домены верхнего уровня могут быть весьма специфическими (например .ny.us или .co.uk). И далее мы хотим видеть конец строки ($
).
Подходящая строка:
[email protected]
Неподходящая строка:
[email protected] (домен верхнего уровня слишком длинный)
Javascript регулярные выражения только цифры
Введение в регулярные выражения
Регулярные выражения (RegExp) — это очень эффективный способ работы со строками.
Составив регулярное выражение с помощью специального синтаксиса вы можете:
- искать текст в строке
- заменять подстроки в строке
- извлекать информацию из строки
Почти во всех языках программирования есть регулярные выражения. Есть небольшие различия в реализации, но общие концепции применяются практически везде.
Регулярные выражения относятся к 1950-м годам, когда они были формализованы как концептуальный шаблон поиска для алгоритмов обработки строк.
Регулярные выражения реализованные в UNIX, таких как grep, sed и популярных текстовых редакторах, начали набирать популярность и были добавлены в язык программирования Perl, а позже и в множество других языков.
JavaScript, наряду с Perl, это один из языков программирования в котором поддержка регулярных выражений встроена непосредственно в язык.
Сложно, по полезно
Новичкам регулярные выражения могут показаться абсолютной ерундой, а зачастую даже и профессиональным разработчикам, если не вкладывать время необходимое для их понимания.
Регулярные выражения сложно писать, сложно читать и сложно поддерживать/изменять.
Но иногда регулярные выражения это единственный разумный способ выполнить какие-то манипуляции над строками, поэтому они являются очень ценным инструментом.
Это руководство нацелено на то чтобы самым простым способом дать вам некоторое представление о регулярных выражениях в JavaScript и предоставить информацию о том как читать и создавать регулярные выражения.
Эмпирическое правило заключается в том, что простые регулярные выражения просты для чтения и записи, в то время как сложные регулярные выражения могут быстро превратиться в беспорядок, если вы не глубоко понимаете основы.
Как выглядят регулярные выражения
В JavaScript регулярные выражения это объект, который может быть определён двумя способами.
Первый способ заключается в создании нового объекта RegExp с помощью конструктора:
Второй способ заключается в использовании литералов регулярных выражений:
Вы знаете что в JavaScript есть литералы объектов и литералы массивов? В нём также есть литералы regexp.
В приведённом выше примере hey называется шаблоном. В литеральной форме он находится между двумя слэшами, а в случае с конструктором объекта, нет.
Это первое важное отличие между двумя способами определения регулярных выражений, остальные мы увидим позже.
Как они работают?
Регулярное выражение, которое мы определили выше как re1 , очень простое. Оно ищет строку hey без каки-либо ограничений: строка может содержать много текста, а слово hey находиться где-то в середине и регулярное выражение сработает. Строка может содержать только слово hey и регулярка опять сработает.
Это довольно просто.
Вы можете попробовать протестировать регулярное выражение с помощью метода RegExp.test(String) , который возвращает логическое ( boolean ) значение:
В примере выше мы просто проверили удовлетворяет ли «hey» шаблону регулярного выражения, который храниться в re1 .
Это проще простого, но вы уже знаете много о регулярных выражениях.A-Za-z0-9]
Анализ текста регулярными выражениями (RegExp) в Excel
Одной из самых трудоемких и неприятных задач при работе с текстом в Excel является парсинг — разбор буквенно-цифровой «каши» на составляющие и извлечение из нее нужных нам фрагментов. Например:
- извлечение почтового индекса из адреса (хорошо, если индекс всегда в начале, а если нет?)
- нахождение номера и даты счета из описания платежа в банковской выписке
- извлечение ИНН из разношерстных описаний компаний в списке контрагентов
- поиск номера автомобиля или артикула товара в описании и т.д.
Обычно во подобных случаях, после получасового муторного ковыряния в тексте вручную, в голову начинают приходить мысли как-то автоматизировать этот процесс (особенно если данных много). Решений тут несколько и с разной степенью сложности-эффективности:
- Использовать встроенные текстовые функции Excel для поиска-нарезки-склейки текста: ЛЕВСИМВ (LEFT), ПРАВСИМВ (RIGHT), ПСТР (MID), СЦЕПИТЬ (CONCATENATE) и ее аналоги, ОБЪЕДИНИТЬ (JOINTEXT), СОВПАД (EXACT) и т.д. Этот способ хорош, если в тексте есть четкая логика (например, индекс всегда в начале адреса). В противном случае формулы существенно усложняются и, порой, дело доходит даже до формул массива, что сильно тормозит на больших таблицах.
- Использование оператора проверки текстового подобия Like из Visual Basic, обернутого в пользовательскую макро-функцию. Это позволяет реализовать более гибкий поиск с использованием символов подстановки (*,#,? и т.д.) К сожалению, этот инструмент не умеет извлекать нужную подстроку из текста — только проверять, содержится ли она в нем.
Кроме вышеперечисленного, есть еще один подход, очень известный в узких кругах профессиональных программистов, веб-разработчиков и прочих технарей — это регулярные выражения (Regular Expressions = RegExp = «регэкспы» = «регулярки»). Упрощенно говоря, RegExp — это язык, где с помощью специальных символов и правил производится поиск нужных подстрок в тексте, их извлечение или замена на другой текст. Регулярные выражения — это очень мощный и красивый инструмент, на порядок превосходящий по возможностям все остальные способы работы с текстом. Многие языки программирования (C#, PHP, Perl, JavaScript…) и текстовые редакторы (Word, Notepad++…) поддерживают регулярные выражения.
Microsoft Excel, к сожалению, не имеет поддержки RegExp по-умолчанию «из коробки», но это легко исправить с помощью VBA. Откройте редактор Visual Basic с вкладки Разработчик (Developer) или сочетанием клавиш Alt+F11. Затем вставьте новый модуль через меню Insert — Module и скопируйте туда текст вот такой макрофункции:
Public Function RegExpExtract(Text As String, Pattern As String, Optional Item As Integer = 1) As String On Error GoTo ErrHandl Set regex = CreateObject("VBScript.RegExp") regex.Pattern = Pattern regex.Global = True If regex.Test(Text) Then Set matches = regex.Execute(Text) RegExpExtract = matches.Item(Item - 1) Exit Function End If ErrHandl: RegExpExtract = CVErr(xlErrValue) End Function
Теперь можно закрыть редактор Visual Basic и, вернувшись в Excel, опробовать нашу новую функцию. Синтаксис у нее следующий:
=RegExpExtract( Txt ; Pattern ; Item )
где
- Txt — ячейка с текстом, который мы проверяем и из которого хотим извлечь нужную нам подстроку
- Pattern — маска (шаблон) для поиска подстроки
- Item — порядковый номер подстроки, которую надо извлечь, если их несколько (если не указан, то выводится первое вхождение)
Самое интересное тут, конечно, это Pattern — строка-шаблон из спецсимволов «на языке» RegExp, которая и задает, что именно и где мы хотим найти. Вот самые основные из них — для начала:
Паттерн |
Описание | |
. |
Самое простое — это точка. Она обозначает любой символ в шаблоне на указанной позиции. | |
\s |
Любой символ, выглядящий как пробел (пробел, табуляция или перенос строки). | |
\S |
Анти-вариант предыдущего шаблона, т.е. любой НЕпробельный символ. | |
\d |
Любая цифра | |
\D |
Анти-вариант предыдущего, т.е. любая НЕ цифра | |
\w |
Любой символ латиницы (A-Z), цифра или знак подчеркивания | |
\W |
Анти-вариант предыдущего, т. |
Начало строки |
$ |
Конец строки | |
\b |
Край слова |
Если мы ищем определенное количество символов, например, шестизначный почтовый индекс или все трехбуквенные коды товаров, то на помощь нам приходят квантификаторы или кванторы — специальные выражения, задающие количество искомых знаков. Квантификаторы применяются к тому символу, что стоит перед ним:
Квантор |
Описание |
? |
Ноль или одно вхождение. Например .? будет означать один любой символ или его отсутствие. |
+ |
Одно или более вхождений. Например \d+ означает любое количество цифр (т.е. любое число от 0 до бесконечности). |
* |
Ноль или более вхождений, т.е. любое количество. Так \s* означает любое количество пробелов или их отсутствие. |
{число} или {число1,число2} |
Если нужно задать строго определенное количество вхождений, то оно задается в фигурных скобках. Например \d{6} означает строго шесть цифр, а шаблон \s{2,5} — от двух до пяти пробелов |
Теперь давайте перейдем к самому интересному — разбору применения созданной функции и того, что узнали о паттернах на практических примерах из жизни.
Извлекаем числа из текста
Для начала разберем простой случай — нужно извлечь из буквенно-цифровой каши первое число, например мощность источников бесперебойного питания из прайс-листа:
Логика работы регулярного выражения тут простая: \d — означает любую цифру, а квантор + говорит о том, что их количество должно быть одна или больше. Двойной минус перед функцией нужен, чтобы «на лету» преобразовать извлеченные символы в полноценное число из числа-как-текст.
Почтовый индекс
На первый взгляд, тут все просто — ищем ровно шесть цифр подряд. Используем спецсимвол \d для цифры и квантор {6} для количества знаков:
Однако, возможна ситуация, когда левее индекса в строке стоит еще один большой набор цифр подряд (номер телефона, ИНН, банковский счет и т.д.) Тогда наша регулярка выдернет из нее первых 6 цифр, т.е. сработает некорректно:
Чтобы этого не происходило, необходимо добавить в наше регулярное выражение по краям модификатор \b означающий конец слова. Это даст понять Excel, что нужный нам фрагмент (индекс) должен быть отдельным словом, а не частью другого фрагмента (номера телефона):
Телефон
Проблема с нахождением телефонного номера среди текста состоит в том, что существует очень много вариантов записи номеров — с дефисами и без, через пробелы, с кодом региона в скобках или без и т.д. Поэтому, на мой взгляд, проще сначала вычистить из исходного текста все эти символы с помощью нескольких вложенных друг в друга функций ПОДСТАВИТЬ (SUBSTITUTE), чтобы он склеился в единое целое, а потом уже примитивной регуляркой \d{11} вытаскивать 11 цифр подряд:
ИНН
Тут чуть сложнее, т.к. ИНН (в России) бывает 10-значный (у юрлиц) или 12-значный (у физлиц). Если не придираться особо, то вполне можно удовлетвориться регуляркой \d{10,12}, но она, строго говоря, будет вытаскивать все числа от 10 до 12 знаков, т.е. и ошибочно введенные 11-значные. Правильнее будет использовать два шаблона, связанных логическим ИЛИ оператором | (вертикальная черта):
Обратите внимание, что в запросе мы сначала ищем 12-разрядные, и только потом 10-разрядные числа. Если же записать нашу регулярку наоборот, то она будет вытаскивать для всех, даже длинных 12-разрядных ИНН, только первые 10 символов. То есть после срабатывания первого условия дальнейшая проверка уже не производится:
Это принципиальное отличие оператора | от стандартной экселевской логической функции ИЛИ (OR), где от перестановки аргументов результат не меняется.
Артикулы товаров
Во многих компаниях товарам и услугам присваиваются уникальные идентификаторы — артикулы, SAP-коды, SKU и т.д. Если в их обозначениях есть логика, то их можно легко вытаскивать из любого текста с помощью регулярных выражений. Например, если мы знаем, что наши артикулы всегда состоят из трех заглавных английских букв, дефиса и последующего трехразрядного числа, то:
Логика работы шаблона тут проста. [A-Z] — означает любые заглавные буквы латиницы. Следующий за ним квантор {3} говорит о том, что нам важно, чтобы таких букв было именно три. После дефиса мы ждем три цифровых разряда, поэтому добавляем на конце \d{3}
Денежные суммы
Похожим на предыдущий пункт образом, можно вытаскивать и цены (стоимости, НДС…) из описания товаров. Если денежные суммы, например, указываются через дефис, то:
Паттерн \d с квантором + ищет любое число до дефиса, а \d{2} будет искать копейки (два разряда) после.
Если нужно вытащить не цены, а НДС, то можно воспользоваться третьим необязательным аргументом нашей функции RegExpExtract, задающим порядковый номер извлекаемого элемента. И, само-собой, можно заменить функцией ПОДСТАВИТЬ (SUBSTITUTE) в результатах дефис на стандартный десятичный разделитель и добавить двойной минус в начале, чтобы Excel интерпретировал найденный НДС как нормальное число:
Автомобильные номера
Если не брать спецтранспорт, прицепы и прочие мотоциклы, то стандартный российский автомобильный номер разбирается по принципу «буква — три цифры — две буквы — код региона». Причем код региона может быть 2- или 3-значным, а в качестве букв применяются только те, что похожи внешне на латиницу. Таким образом, для извлечения номеров из текста нам поможет следующая регулярка:
Время
Для извлечения времени в формате ЧЧ:ММ подойдет такое регулярное выражение:
После двоеточия фрагмент [0-5]\d, как легко сообразить, задает любое число в интервале 00-59. Перед двоеточием в скобках работают два шаблона, разделенных логическим ИЛИ (вертикальной чертой):
- [0-1]\d — любое число в интервале 00-19
- 2[0-3] — любое число в интервале 20-23
К полученному результату можно применить дополнительно еще и стандартную Excel’евскую функцию ВРЕМЯ (TIME), чтобы преобразовать его в понятный программе и пригодный для дальнейших расчетов формат времени.
Проверка пароля
Предположим, что нам надо проверить список придуманных пользователями паролей на корректность. По нашим правилам, в паролях могут быть только английские буквы (строчные или прописные) и цифры.) и концом ($) в нашем тексте находились только символы из заданного в квадратных скобках набора. Если нужно проверить еще и длину пароля (например, не меньше 6 символов), то квантор + можно заменить на интервал «шесть и более» в виде {6,}:
Город из адреса
Допустим, нам нужно вытащить город из строки адреса. Поможет регулярка, извлекающая текст от «г.» до следующей запятой:
Давайте разберем этот шаблон поподробнее.
Если вы прочитали текст выше, то уже поняли, что некоторые символы в регулярных выражениях (точки, звездочки, знаки доллара и т.д.) несут особый смысл. Если же нужно искать сами эти символы, то перед ними ставится обратная косая черта (иногда это называют экранированием). Поэтому при поиске фрагмента «г.» мы должны написать в регулярке г\. если ищем плюсик, то \+ и т.д.
Следующих два символа в нашем шаблоне — точка и звездочка-квантор — обозначают любое количество любых символов, т.е. любое название города.
На конце шаблона стоит запятая, т.к. мы ищем текст от «г.» до запятой. Но ведь в тексте может быть несколько запятых, правда? Не только после города, но и после улицы, дома и т.д. На какой из них будет останавливаться наш запрос? Вот за это отвечает вопросительный знак. Без него наша регулярка вытаскивала бы максимально длинную строку из всех возможных:
В терминах регулярных выражений, такой шаблон является «жадным». Чтобы исправить ситуацию и нужен вопросительный знак — он делает квантор, после которого стоит, «скупым» — и наш запрос берет текст только до первой встречной запятой после «г.»:
Имя файла из полного пути
Еще одна весьма распространенная ситуация — вытащить имя файла из полного пути. Тут поможет простая регулярка вида:
Тут фишка в том, что поиск, по сути, происходит в обратном направлении — от конца к началу, т.к. в конце нашего шаблона стоит $, и мы ищем все, что перед ним до первого справа обратного слэша. Бэкслэш заэкранирован, как и точка в предыдущем примере.
P.S.
«Под занавес» хочу уточнить, что все вышеописанное — это малая часть из всех возможностей, которые предоставляют регулярные выражения. Спецсимволов и правил их использования очень много и на эту тему написаны целые книги (рекомендую для начала хотя бы эту). В некотором смысле, написание регулярных выражений — это почти искусство. Почти всегда придуманную регулярку можно улучшить или дополнить, сделав ее более изящной или способным работать с более широким диапазоном вариантов входных данных.
Для анализа и разбора чужих регулярок или отладки своих собственных есть несколько удобных онлайн-сервисов: RegEx101, RegExr и др.
К сожалению, не все возможности классических регулярных выражений поддерживаются в VBA (например, обратный поиск или POSIX-классы) и умеют работать с кириллицей, но и того, что есть, думаю, хватит на первое время, чтобы вас порадовать.
Если же вы не новичок в теме, и вам есть чем поделиться — оставляйте полезные при работе в Excel регулярки в комментариях ниже. Один ум хорошо, а два сапога — пара!
Ссылки по теме
20 коротких шагов для освоения регулярных выражений. Часть 1
Оригинал этой статьи здесь.
Наверное, теории много не бывает, и я приведу несколько ссылок на более подробный материал по regex в конце статьи. Но, мне показалось, что начинать вникать в такую тему как регулярные выражения будет гораздо интереснее, если есть возможность заниматься не только зубрежкой, но и сразу закреплять знания, выполняя небольшие задания по ходу обучения.
Пожалуй приступим.
Обычно противники использования регулярных выражений (‘RegEx’ или просто ‘regex’) в программировании приводят следующую цитату, приписываемую Джейми Завински:
«Некоторые люди, сталкиваясь с проблемой, думают: «Я знаю, я буду использовать регулярные выражения». Теперь у них две проблемы».
На самом деле, использование регулярных выражений еще не является хорошей или плохой идеей. И это само по себе не добавит проблем и не решит ни одну из них. Это всего-лишь инструмент. И то, как вы его используете (правильно или неправильно), определяет, какие результаты вы увидите.
Если вы попытаетесь использовать regex, например, для создания HTML-парсера, то вы, скорее всего, испытаете боль. Но если вы хотите просто извлечь, например, временные метки из некоторых строк, у вас, вероятно, будет все в порядке.
Чтобы облегчить вам освоение регулярных выражений, я собрал этот урок, который поможет вам с нуля овладеть регулярными выражениями всего за двадцать коротких шагов. Это руководство в основном фокусируется на основных понятиях регулярных выражений и углубляется в более сложные темы только по мере необходимости.
Шаг 1: для чего нужно использовать регулярные выражения
Регулярные выражения используются для поиска совпадений в тексте по заданным шаблонам (образцам).
При помощи regex мы можем легко и просто извлекать изюм из кекса слова из текста, а также отдельные литеральные (буквальные) и мета (специальные) символы и их последовательности, отвечающие определенным критериям.
Вот что говорит нам о них Википедия:
Регуля́рные выраже́ния (англ. regular expressions) — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters).
Для поиска используется строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска. Для манипуляций с текстом дополнительно задаётся строка замены, которая также может содержать в себе специальные символы.
Шаблон может быть таким-же простым, как, например, слово dog
в этом предложении:
The quick brown fox jumps over the lazy dog.
Это регулярное выражение выглядит так:
dog
… Достаточно легко, неправда-ли?
Образцом может быть также любое слово, которое содержит букву o
.
Регулярное выражение для поиска такого шаблона может выглядеть так:
\w*o\w*
(Опробовать это регулярное выражение можно здесь),
Можно заметить, что по мере усложнения требований к «соответствию», регулярное выражение также усложняется.
Существуют дополнительные формы записи для указания групп символов и соответствия повторяющимся шаблонам, что я объясню ниже. Но, как только мы находим соответствие шаблону в каком-то тексте, то что-же мы можем с ним делать?
Современные движки регулярных выражений позволяют извлекать символы или их последовательности (подстроки) из содержащегося текста, или удалять их, или заменять их другим текстом. В общем, регулярные выражения используются для разбора и манипулирования текстом.
Мы можем извлечь, например, подстроки, которые выглядят как IP-адреса, а затем попытаться проверить их. Или мы можем извлечь имена и адреса электронной почты и сохранить их в базе данных. Или использовать регулярные выражения, чтобы найти конфиденциальную информацию
(например, номера паспортов или номера телефонов) в электронных письмах и предупредить пользователя о том, что он может подвергнуть себя риску. Regex действительно универсальный инструмент, который легко выучить, но трудно освоить:
«Точно так же, как есть разница между хорошим исполнением музыкального произведения и созданием музыки, есть и разница между знанием регулярных выражений и их пониманием».
(Как это работает)
Когда вы используете квадратные скобки, вы указываете механизму регулярных выражений, чтобы он искал совпадения только с одним из символов, содержащихся в скобках. Движок находит символ c
, потом символ a
, но если следующий символ не r
или t
, то это еще не полное совпадение.
Если он находит ca
, а затем либо r
, либо t
, он останавливается. Он не будет пытаться сопоставить больше символов, потому что квадратные скобки указывают, что нужно искать только один из содержащихся символов. Когда он находит ca
, то следующим находит r
в слове cart
, и останавливается, потому что он уже нашел совпадение последовательности car
.
Задачи для тренировки:
Напишите регулярное выражение, которое находит все 10 совпадений с шаблонами had
и Had
в этом отрывке непереводимой игры слов на местном диалекте:
pattern: string: Jim, where Bill had had "had", had had "had had".
(Возможное решение)
Вот мы уже и научились писать более-менее сложные регулярные выражения, и мы только на шаге 2! Продолжаем!
Шаг 3: escape-последовательности
На предыдущем шаге мы узнали о квадратных скобках []
и о том, как они помогают нам найти альтернативные совпадения при помощи движка regex.
А что если мы хотим найти совпадения в виде самих открытых и закрытых квадратных скобок []
?
Когда мы хотели найти по-символьное совпадение со словом cat
, то мы предоставляли движку regex эту последовательность символов (cat
).
Давайте попробуем найти квадратные скобки []
таким же способом:
pattern: [] string: You can't match [] using regex! You will regret this! matches:
(Смотрим что получилось)
Что-то не сработало, однако… Это происходит потому, что символы квадратной скобки работают как специальные символы движка regex, которые обычно используются для обозначения чего-то иного, и не являются буквальным шаблоном для поиска их самих.
(Решение)
Шаг 7: классы символов
Классы символов даже проще, чем диапазоны символов. Различные движки регулярных выражений имеют разные доступные классы, поэтому здесь я расскажу только об основных. (Проверьте, какую версию regex вы используете, потому что их может быть больше — или они могут отличаться от показанных здесь.)
Классы символов работают почти как диапазоны, но при этом, вы не можете указать значения ‘start’ и ‘end’:
класс | символы |
---|---|
\d | «цифры» [0-9] |
\w | «символы слова» [A-Za-z0-9_] |
\s | «пробелы» [ \t\r\n\f] |
Класс символов \w
«word» особенно полезен, поскольку этот набор символов часто требуется для допустимых идентификаторов (имен переменных, функций и т.д.) в различных языках программирования.
Мы можем использовать \w
, чтобы упростить регулярное выражение, которое мы видели ранее:
pattern: \\[a-z]
string: `\n`, `\r`, `\t`, and `\f` are whitespace characters, `\. abc $начало / конец строки \ б граница слова Экранированные символы \.\ * \\ экранированных специальных символов \ t \ n \ r табуляция, перевод строки, возврат каретки \ u00A9 Unicode сброшен © Группы и поиск (abc) группа захвата \ 1 обратная ссылка на группу № 1 (?: Abc) группа без захвата (? = Abc) положительный прогноз (?! Abc) негативный прогноз Квантификаторы и чередование а * а + а? 0 или более, 1 или более, 0 или 1 а {5} а {2,} ровно пять, два или больше а {1,3} между одним и тремя а +? а {2,}? совпадений как можно меньше ab | cd соответствует ab или cd Регулярное выражение для чисел и диапазона чисел (с примерами) - Учебное пособие по регулярным выражениям
Из этой статьи вы узнаете, как сопоставить числа и диапазон чисел в регулярных выражениях.Диапазон чисел Regex включает соответствие от 0 до 9, от 1 до 9, от 0 до 10, от 1 до 10, от 1 до 12, от 1 до 16 и 1-31, 1-32, 0-99, 0-100, 1-100, 1-127, 0-255, 0-999, 1-999, 1-1000 и 1-9999.
The
Первое, что нужно помнить о регулярных выражениях, это то, что
они не знают чисел, они не умеют считать и не умеют
понять 1-100 означает любое число от 1 до 100. Причина в регулярном выражении
работает только с текстом, а не с числами, поэтому вам нужно немного
осторожность при работе с числами и диапазонами номеров или числовыми диапазонами в
регулярное выражение, операции поиска, проверки или замены.Если вы хотите изучить регулярное выражение для чисел и любой диапазон чисел с логикой и простыми и практическими примерами, я предлагаю вам ознакомиться с этим простым и точным курсом регулярных выражений с пошаговым подходом. Этот видеокурс научит вас логике и философии регулярных выражений для различных диапазонов чисел.
Только на
Например, допустим, если вы хотите сопоставить любое число от 1 до 100, и вы
напишите для него регулярное выражение как/ [1-100]
/и
надеюсь, что он будет соответствовать всем числам от 1 до 100, тогда ваше регулярное выражение
будет работать, но даст неожиданный результат.Это регулярное выражение будет соответствовать только двум
числа, да, всего два числа и в этом нет никаких сомнений. Вы можете представить
какие два числа? Если вы посмотрите на это, вы узнаете, что это
будет соответствовать только 0 и 1 и ничего больше. Аналогично диапазон
[0-255] будет соответствовать 0,1,2,5. Во-первых, это диапазон 0-2, который находится в
класс символов будет соответствовать 0,1,2 и 5, записанным два раза, будет соответствовать 5.
Теперь давайте начнем логику и философию сопоставления чисел и чисел.
диапазоны в регулярных выражениях.Числа в регулярном выражении
Самый простой
совпадение чисел - буквальное совпадение.Если вы хотите сопоставить 3, просто напишите
/ 3 /
или если вы хотите сопоставить 99, напишите / 99 / и это будет успешным
соответствие. Аналогично для соответствия 2019 напишите / 2019 / и это число
буквальное совпадение. Но вы можете видеть, что это не гибко, так как это очень сложно.
чтобы узнать о конкретном числе в тексте или число может встречаться в
диапазоны.\ d для
однозначные или многозначные числаДля соответствия любому
число от 0 до 9 мы используем \ d в регулярном выражении. Он будет соответствовать любой отдельной цифре
число от 0 до 9.\ d
означает [0-9] или соответствует любому числу от 0 до 9.Вместо того
при записи 0123456789 сокращенная версия будет [0-9], где [] используется для
диапазон символов.[1-9] [0-9]
будет соответствовать двузначному числу от 10 до 99.Но если вы
хотите сопоставить число из любого количества цифр, например 2,55,235, 9875 a
квантификатор добавлен в конец/ \ d + /
где + - квантификатор, который соответствует одному
и как можно больше раз.Две или три цифры
совпадение чиселКому
соответствует двузначному числу / \ d {2} / используется, где {} - это
квантификатор и 2 означает совпадение два раза или просто двузначное число.$ Символы используются для начала или конца
строка.Регулярное выражение для диапазона 0-9
В соответствие
числовой диапазон 0-9, то есть любое число от 0 до 9, регулярное выражение простое/ [0-9] /
Регулярное выражение от 1 до 9
Для соответствия любому
число от 1 до 9, регулярное выражение простое/ [1-9] /
Подобно тебе
можно использовать / [3-7] / для соответствия любому числу от 3 до 7 или / [2-5] / для соответствия
2,3,4,5Regex
от 0 до 10Кому
числа от 0 до 10 - это начало небольшого осложнения, а не
столько, но используется другой подход.Эта серия разбита на
к двум компонентам.1. от 0 до 9
2. 10
И регулярное выражение
будет написано для компонентов/ \ b ([0-9] | 10) \ b /
Пояснение:
Для двоих
комплектующих пишем две штуки1. от 0 до
9 [0-9] и2.
10 10 и мы используем группу и используем
|
оператор, который называется оператором ИЛИ, что означает 0-9
или 10
Вот.Regex от 1 до
10Аналогично для
От 1 до 10 регулярное выражение будет\ b ([1-9] | 10) \ b
Regex
с 1 по 12\ b ([1-9] | 1 [0-2]) \ b
Диапазон
от 1 до 12 делится на два диапазона1.От 1 до 9
-> [1-9]2. 10–12
-> 1 [0-2]Regex for 1
к 16\ b ([1-9] | 1 [0-6]) \ b
В этом случае
диапазон делится на1. 1 до 9
2. 10–16
Regex
для диапазона номеров 1-31\ b ([1-9] | [12] [0-9] | 3 [01]) \ b
Здесь диапазон 1-31
делится на три компонента по требованию1. от 1 до 9 -> [0-9]
2. 10 до 29 ->
[12] [0-9]3.С 30 по 31 ->
3 [01]Regex
для 1-32Регулярное выражение для
От 1 до 32 - это\ b ([1-9] | [12] [0-9] | 3 [0-2]) \ b
1. от 1 до 9 -> [0-9]
2. 10 до 29 ->
[12] [0-9]3. 30 до 32 ->
3 [02]Regex для
0-99Обычный
выражение для диапазона от 0 до 99 -\ b ([0-9] | [1-9] [0-9]) \ b
Это диапазон
разделены на два диапазона1. от 0 до 9
-> [0-9]2. 10–99
-> [1-9] [0-9]Regex для
0-100Regex для
диапазон от 0 до 100 -\ b ([0-9] | [1-9] [0-9] | 100) \ b
Здесь
Ассортимент разделен на три компонента, а дополнительный компонент
тогда предыдущий диапазон равен 100.Regex
для 1-100Обычный
выражение для этого диапазона -\ b ([1-9] | [1-9] [0-9] | 100) \ b
1. Первая
компонент от 1 до 92. Второй
часть от 10 до 993. Третья часть - 100
Regex для
1-127Regex для
диапазон от 1 до 127 -\ b ([1-9] | [1-9] [0-9] | 1 [01] [0-9] | 12 [0-7]) \ b
Числовой
диапазон от 1 до 127 делится на1. 1 до 9
2. 10 до 99
3. 100 до 119
4. 120 до 127
Regex
для 0-255Это диапазон
также разделен на три части.1. 0-199
Регулярное выражение для
этот компонент[01]? [0-9] [0-9]?
2. Второй
часть 200-249 и регулярное выражение для этой части2 [0-4] [0-9]
3. Наконец
последняя часть 250-25525 [0-5]
Полный
регулярное выражение -/ \ b ([01]? [0-9] [0-9]? | 2 [0-4] [0-9] | 25 [0-5])
Подробнее
подробнее см. регулярное выражение
для ip-адресаRegex
для 0-999([0-9] | [1-9] [0-9] | [1-9] [0-9] [0-9])
Регулярное выражение для
диапазон от 0 до 999 разделен на три части,1.От 0 до 9
2. 10 до 99
3. 100 до 999
Regex
для 1-999Обычный
выражение для 1-999 -([1-9] | [1-9] [0-9] | [1-9] [0-9] [0-9])
Regex
для диапазона номеров 1-1000Код регулярного выражения для соответствия диапазону от 1
до 1000 -([1-9] | [1-9] [0-9] | [1-9] [0-9] [0-9] | 1000)
Regex
для 1-9999Regex для
диапазон от 1 до 9999 -([1-9] | [1-9] [0-9] | [1-9] [0-9] [0-9] | [1-9] [0-9] [0-9] [0-9])
Минутку...
Пожалуйста, включите куки и перезагрузите страницу.
Это автоматический процесс. Ваш браузер в ближайшее время перенаправит вас на запрошенный контент.
Подождите до 5 секунд…
+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [ ] + !! [] + !! []) + (! + [] - (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + ( !! []) + !! [] + !! []) + (+ !! [])) / + ((+ !! [] + []) + (+ !! []) + (! + [] + (!! []) + !! []) + (! + [] - (!! [])) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [ ] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] ) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [ ] + (!! []) + !! []))
+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [ ] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) - []) + (! + [] - (!! []) ) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [ ] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) - []) + (! + [] + (!! []) + !! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] +! ! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + ( ! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) - []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [ ] - (!! [])))
+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [ ] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! [ ]) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [ ] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] - (!! [ ])) + (! + [] + (!! []) + !! [])) / + ((+ !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] +! ! [] + !! [] + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] ) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! [] ) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []))
+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [ ]) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] - (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + (! + [] + ( !! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [])) / + ((! + [] + ( !! []) + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) - []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [ ] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (! ! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []))
+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] - (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! [] ) - []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [])) / + ((! + [] + (!! []) + !! [] + []) + (! + [] + (!! []) + !! [] + !! [ ] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] ) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (+ !! []) + ( ! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []))
+ ((! + [] + (!! [] ) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] - (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) - []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [])) / + ((! + [] + (!! []) - [] + []) + (! + [] + (!! []) - []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! [] ) + !! [] + !! [] + !! [] + !! [] + !! []) + (+ !! []) + (+ !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! []) + (! + [] - (!! [])))
+ ((! + [] + (!! []) + !! [] + !! [] + !! [ ] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] +! ! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] - (!! [])) + (! + [] - (!! [])) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [])) / + ((! + [] + (!! []) +! ! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) - []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] - (!! [])) + (! + [] + (!! []) + !! [] + !! []))
Сопоставление числовых диапазонов с регулярным выражением
Поскольку регулярные выражения имеют дело с текстом, а не с числами, сопоставление числа в заданном диапазоне требует немного дополнительной осторожности.Вы не можете просто написать [0-255], чтобы соответствовать числу от 0 до 255. Хотя регулярное выражение является допустимым, оно соответствует чему-то совершенно другому. [0-255] - это класс символов с тремя элементами: диапазон символов 0-2, символ 5 и символ 5 (снова). Этот класс символов соответствует одной цифре 0, 1, 2 или 5, как и [0125].
Так как регулярные выражения работают с текстом, обработчик регулярных выражений обрабатывает 0 как один символ, а 255 как три символа. Чтобы сопоставить все символы от 0 до 255, нам понадобится регулярное выражение, которое соответствует от одного до трех символов.
Регулярное выражение [0-9] соответствует однозначным числам от 0 до 9. [1-9] [0-9] соответствует двузначным числам от 10 до 99. Это простая часть.
Сопоставление трехзначных чисел немного сложнее, так как нам нужно исключить числа с 256 по 999. 1 [0-9] [0-9] принимает значения от 100 до 199. 2 [0-4] [0 -9] соответствует от 200 до 249. Наконец, 25 [0-5] добавляет 250 до 255.
Как видите, вам нужно разделить числовой диапазон на диапазоны с одинаковым количеством цифр, и каждый из этих диапазонов которые допускают одинаковые вариации для каждой цифры.В трехзначном диапазоне в нашем примере числа, начинающиеся с 1, допускают использование всех 10 цифр для следующих двух цифр, а числа, начинающиеся с 2, ограничивают количество цифр, которым разрешено следовать.
Соединяя все это вместе с помощью чередования, получаем: [0-9] | [1-9] [0-9] | 1 [0-9] [0-9] | 2 [0-4] [0-9] ] | 25 [0-5]. Это соответствует нужным нам числам, с одной оговоркой: поиск по регулярным выражениям обычно допускает частичные совпадения, поэтому наше регулярное выражение будет соответствовать 123 в 12345. Есть два решения этой проблемы.
Поиск числовых диапазонов
Если вы ищете эти числа в более крупном документе или строке ввода, используйте границы слов, чтобы требовать, чтобы перед любым допустимым соответствием и после него шел не-слово (или вообще не было символа).Затем регулярное выражение становится \ b ([0-9] | [1-9] [0-9] | 1 [0-9] [0-9] | 2 [0-4] [0-9] | 25 [ 0-5]) \ b. Поскольку у оператора альтернативы самый низкий приоритет из всех, скобки необходимы для группировки альтернатив. Таким образом, механизм регулярных выражений попытается сопоставить границу первого слова, затем попробует все альтернативы, а затем попытается сопоставить границу второго слова после совпавших чисел. Механизмы регулярных выражений рассматривают все буквенно-цифровые символы, а также подчеркивание, как символы слова.
Проверка числовых диапазонов
Если вы используете регулярное выражение для проверки ввода, вы, вероятно, захотите проверить, что все вводимые данные состоят из действительного числа.([012]? [0-9]? [0-9] | 3 [0-5] [0-9] | 36 [0-6]) $
Сделать пожертвование
Этот веб-сайт только что сохранил вы собираетесь в книжный магазин? Сделайте пожертвование в поддержку этого сайта, и вы получите неограниченного доступа к этому сайту без рекламы!
Шпаргалка по Regex
В таблицах ниже приведены ссылки на базовое регулярное выражение. В случае сомнений при чтении остальной части сайта вы всегда можете вернуться и посмотреть здесь.(Если вам нужна закладка, вот прямая ссылка на справочные таблицы регулярных выражений). Я рекомендую вам распечатать таблицы, чтобы у вас на столе была шпаргалка для быстрого ознакомления.
Таблицы не являются исчерпывающими по двум причинам. Во-первых, все разновидности регулярных выражений различаются, и я не хотел загромождать страницу чрезмерно экзотическим синтаксисом. Чтобы получить полную ссылку на конкретные разновидности регулярных выражений, которые вы будете использовать, всегда лучше сразу обратиться к источнику. Фактически, для некоторых движков регулярных выражений (таких как Perl, PCRE, Java и.NET), возможно, вы захотите проверять его раз в год, так как их создатели часто вводят новые функции.
Другая причина, по которой таблицы не являются исчерпывающими, заключается в том, что я хотел, чтобы они служили кратким введением в регулярное выражение. Если вы полный новичок, вы должны получить твердое представление об основном синтаксисе регулярных выражений, просто прочитав примеры в таблицах. Я попытался представить функции в логическом порядке и не допустить странностей, которые я никогда не видел в реальной практике, таких как "символ колокольчика". С этими таблицами в качестве трамплина вы сможете продвигаться к мастерству, исследуя другие страницы сайта.
Как пользоваться таблицами
Таблицы предназначены для использования в качестве ускоренного курса регулярных выражений и предназначены для медленного чтения, по одной строке за раз. В каждой строке в крайнем левом столбце вы найдете новый элемент синтаксиса регулярного выражения. В следующем столбце «Легенда» объясняется, что этот элемент означает (или кодирует) в синтаксисе регулярного выражения. Следующие два столбца работают рука об руку: столбец «Пример» дает допустимое регулярное выражение, в котором используется элемент, а столбец «Образец совпадения» представляет текстовую строку, которая может быть сопоставлена регулярным выражением.
Вы, конечно, можете читать таблицы в Интернете, но если вы страдаете даже самым легким случаем онлайн-СДВ (синдром дефицита внимания), как и большинство из нас… Что ж, я настоятельно рекомендую вам распечатать их. Вы сможете медленно изучать их и использовать в качестве шпаргалки позже, когда будете читать остальную часть сайта или экспериментировать со своими собственными регулярными выражениями.
Наслаждайтесь!
Если вы передозируете, не пропустите следующую страницу, которая возвращается на Землю и рассказывает о некоторых действительно интересных вещах: 1001 способ использования Regex .
Ускоренный курс регулярных выражений и шпаргалка
Для удобства навигации вот несколько точек перехода к различным разделам страницы:
✽ Персонажи
✽ Квантификаторы
✽ Другие персонажи
✽ Логика
✽ Больше белого пространства
✽ Другие квантификаторы
✽ Классы персонажей
✽ Якоря и границы
✽ Классы POSIX
✽ Встроенные модификаторы
✽ Обзоры
✽ Операции класса персонажей
✽ Другой синтаксис(прямая ссылка)
Персонажи
Символ | Легенда | Пример | Пример совпадения | ||||
---|---|---|---|---|---|---|---|
\ d | Большинство механизмов: одна цифра от 0 до 9 | file_ \ d \ d | file_25 | \ d000 | \ d0003 .NET, Python 3: одна цифра Unicode в любом скрипте | file_ \ d \ d | file_9੩ |
\ w | Большинство движков: «символ слова»: буква ASCII, цифра или символ подчеркивания | \ w- \ w \ w \ w | A-b_1 | ||||
\ w | .Python 3: «символ слова»: буква Unicode, идеограмма, цифра или знак подчеркивания | \ w- \ w \ w \ w | 8 -ま _۳ | ||||
\ w | .NET: «символ слова»: буква Unicode, идеограмма, цифра или соединитель | \ w- \ w \ w \ w | 字 - ま ‿۳ | ||||
\ s | Большинство движков: "пробельный символ": пробел, табуляция, новая строка, возврат каретки, вертикальная табуляция | a \ sb \ sc | ab c | ||||
\ s | .NET, Python 3, JavaScript: «пробельный символ»: любой разделитель Unicode | a \ sb \ sc | ab c | ||||
\ D | Один символ, который не является цифрой , как определено в вашего движка \ d | \ D \ D \ D | ABC | ||||
\ W | Один символ, который не является словесным символом , как определено в вашем двигателе \ w | \ W \ W \ W \ W \ W | * - + =) | ||||
\ S | Один символ, который не является пробельным символом в соответствии с определением вашего двигателя \ s | \ S \ S \ S \ S | Yoyo |
(прямая ссылка)
Квантификаторы
Quantifier | Legend | Example | Sample Match |
---|---|---|---|
+ | Одно или несколько | Version \ w- \ w + | Version A-b1_1 |
три раза { | \ D {3} | ABC | |
{2,4} | Два-четыре раза | \ d {2,4} | 156 |
{3,} | Три или более раз | \ w {3,} | regex_tutorial |
* | Ноль или более раз | A * B * C * | AAACC |
? | Один раз или нет | множественного числа? | множественное число |
(прямая ссылка)
Еще персонажи
Символ | Легенда | Пример | Пример совпадения |
---|---|---|---|
./ \ | |||
\ | Экранирует специальный символ | \ [\ {\ (\) \} \] | [{()}] |
(прямая ссылка)
Логика
Логика | Легенда | Пример | Пример совпадения |
---|---|---|---|
| | Операнд Чередование / ИЛИ | 22 | 33 | 33 |
(…) | Группа захвата | A (nt | pple) | Apple (захватывает «точку») |
\ 1 Содержимое группы 1 | r (\ w) g \ 1x | regex | |
\ 2 | Содержимое группы 2 | (\ d \ d) \ + (\ d \ d) = \ 2 \ + \ 1 | 12 + 65 = 65 + 12 |
(?:…) | Группа без захвата | A (?: Nt | pple) | Apple |
(прямая ссылка)
Подробнее White-Space
Символ | Легенда | Пример | Пример соответствия | |||
---|---|---|---|---|---|---|
\ t | Tab | T \ t \ w {2} | T ab | |||
\ r | см. ниже | |||||
\ n | Символ перевода строки | см. ниже | ||||
\ r \ n | Разделитель строк в Windows | AB \ r \ nCD | AB CD | Perl, PCRE (C, PHP, R…): один символ, не являющийся разрывом строки | \ N + | ABC |
\ h | Perl, PCRE (C, PHP, R…), Java: один горизонтальный пробельный символ: табуляция или разделитель пробелов Unicode | |||||
\ H | Один символ, не являющийся горизонтальным пробелом | |||||
\ v | .NET, JavaScript, Python, Ruby: вертикальная табуляция | |||||
\ v | Perl, PCRE (C, PHP, R…), Java: один вертикальный пробел: перевод строки, возврат каретки, вертикальная табуляция, подача формы , разделитель абзацев или строк | |||||
\ V | Perl, PCRE (C, PHP, R…), Java: любой символ, кроме вертикального пробела | |||||
\ R | Perl, PCRE (C, PHP, R…), Java: один разрыв строки (пара возврата каретки + перевода строки и все символы, соответствующие \ v) |
(прямая ссылка)
Другие квантификаторы
Quantifier | Legend | Example | Sample Match | ||||
---|---|---|---|---|---|---|---|
+ | Знак + (один или несколько) «жадный» | \ d + | 12345 | ? | Делает кванторы "ленивыми" | \ d +? | 1 из 1 2345 |
* | Знак * (ноль или более) означает «жадный» | A * | AAA | ||||
? | Делает кванторы «ленивыми» | A *? | пустой в AAA | ||||
{2,4} | Два-четыре раза, «жадный» | \ w {2,4} | abcd | ||||
? | Делает кванторы "ленивыми" | \ w {2,4}? | ab в ab cd |
(прямая ссылка)
Классы символов
Символ | Легенда | Пример | Пример совпадения | ||
---|---|---|---|---|---|
[…] | Один из символов в квадратных скобках | [AEIOU] | Одна гласная верхнего регистра | ||
T [ao] p | Tap или Top | ||||
- | Индикатор диапазона | [az] | Одна строчная буква | ||
[xy] Один из символов в диапазоне от x до y | [AZ] + | GREAT | |||
[…] | Один из символов в скобках | [AB1-5w-z] | Один из любого : A, B, 1,2,3,4,5, w, x, y, z | ||
[xy] | Один из символов в диапазоне от x до y | [- ~] + | символов в печатаемой части таблицы ASCII. | Начало строки или начало строки в зависимости от многострочного режима.abc. * | abc (начало строки) |
$ | Конец строки или конец строки в зависимости от многострочного режима. Многие зависящие от двигателя тонкости. | . *? конец $ | это конец | ||
\ A | Начало строки (все основные движки, кроме JS) | \ Aabc [\ d \ D] * | abc (строка ... .. .start) | ||
\ z | Самый конец строки Недоступно в Python и JS | конец \ z | это есть... \ n ... конец | ||
\ Z | Конец строки или (кроме Python) перед окончательным разрывом строки Недоступно в JS | конец \ Z | это ... \ n ... конец \ n | ||
\ G | Начало строки или конец предыдущего совпадения .NET, Java, PCRE (C, PHP, R…), Perl, Ruby | ||||
\ b | Граница слова Большинство механизмов: позиция, в которой только одна сторона представляет собой букву ASCII, цифру или знак подчеркивания | Боб .* \ bcat \ b | Боб съел кота | ||
\ b | Граница слова .NET, Java, Python 3, Ruby: позиция, в которой только одна сторона представляет собой букву Unicode, цифру или знак подчеркивания | Bob. * \ b \ кошка \ b | Боб съел кошку | ||
\ B | Ни слова границы | c. * \ Bcat \ B. * | copycats |
(прямая ссылка)
Классы POSIX
Символ | Легенда | Пример | Пример совпадения |
---|---|---|---|
[: alpha:] | PCRE (C, PHP, R…): буквы ASCII AZ и az | [8 [: alpha:]] + | WellDone88 |
[: alpha:] | Ruby 2: буква или идеограмма Unicode | [[: alpha:] \ d] + | кошка99 |
[: alnum:] | PCRE ( C, PHP, R…): цифры и буквы ASCII AZ и az | [[: alnum:]] {10} | ABCDE12345 |
[: alnum:] | Ruby 2: цифра, буква или идеограмма Unicode | [[: alnum:]] {10} | кошка |
[: punct:] | PCRE (C, PHP, R…): знак препинания ASCII | [[: punct:]] + | ?!.,:; |
[: punct:] | Ruby: знак препинания Unicode | [[: punct:]] + | ‽,: 〽⁆ |
(прямая ссылка)
Ни один из них не поддерживается в JavaScript. В Ruby остерегайтесь (? S) и (? M).
Модификатор | Легенда | Пример | Пример совпадения | |
---|---|---|---|---|
(? I) | Режим без учета регистра (кроме JavaScript) | (? i) понедельник | понедельник | |
(? s) | режим DOTALL (кроме JS и Ruby).3 $ | 1 2 3 | ||
(? M) | В Ruby: то же, что (? S) в других движках, то есть режим DOTALL, то есть точка соответствует разрывам строки | (? M) От A . * до Z | От A до Z | |
(? x) | Режим свободного интервала (кроме JavaScript). Также известен как режим комментариев или режим пробелов | (? X) # это # комментарий abc # запись нескольких строк # [] d # пробелы должны быть # в скобках | abc d | |
(? n) | .) | PCRE 10.32+: сбросить модификаторы | Сбросить модификаторы ismnx |
(прямая ссылка)
(прямая ссылка)
Class Operation | Legend | Example | Sample Match |
---|---|---|---|
[… - […]] | .NET: вычитание класса символов. Один символ, который находится в тех, которые находятся слева, но не в вычитаемом классе. | [a-z- [aeiou]] | Любая строчная согласная |
[… - […]] | .NET: вычитание класса символов. | [\ p {IsArabic} - [\ D]] | Арабский символ, не являющийся нецифровой цифрой, т. Е. Арабская цифра |
[… && […]] | Java, Ruby 2+ : пересечение классов символов. Один символ, который есть как слева, так и в классе &&. | [\ S && [\ D]] | Непробельный символ, не являющийся цифрой. |
[… && […]] | Java, Ruby 2+: пересечение символьных классов.\ p {L} \ p {N}]] | Арабский символ, не являющийся буквой или числом |
(прямая ссылка)
Другой синтаксис
Синтаксис | Легенда | Пример | Пример совпадения |
---|---|---|---|
\ K | Не допускать Perl, PCRE (C, PHP, R…), альтернативный механизм Python regex , Ruby 2+: отбросьте все, что было найдено до сих пор из общего совпадения, чтобы вернуть | \ K \ d + | 12 |
\ Q… \ E | Perl, PCRE (C, PHP, R…), Java: рассматривать все, что находится между разделителями, как буквальную строку.Полезно для экранирования метасимволов. | \ Q (C ++?) \ E | (C ++?) |
1001 способ использования Regex
Создавайте регулярные выражения для проверки сложности паролей!
06Фев, 2017
Создавайте регулярные выражения для проверки сложности паролей!
Категории / учебные пособия Автор: Сара Мариво
Один из фундаментальных аспектов компьютерной безопасности - это пароль. Может быть полезно помочь администраторам и руководителям групп, поощряя их использовать сложные пароли.Следующие ниже шаги помогут вам создать более безопасный процесс с помощью регулярного выражения (или Regex). Представленный код затем будет использоваться, чтобы позволить пользователю изменить свои пароли.
Презентация:
Ключ к созданию надежного пароля сводится к сочетанию длины, сложности и случайности (строчные или прописные символы, цифры и специальные символы). Использование Regex поможет вам установить пароль. Если вы не знакомы с регулярными выражениями, не волнуйтесь. Начало строки.
(? =. * [A-z])
должен содержать символы (символы нижнего или верхнего регистра). (? =. * [A-z])
должен содержать один символ нижнего регистра. (? =. * [A-Z])
должен содержать один символ верхнего регистра. (? =. * [0-9])
должен содержать одну цифру от 0 до 9. (? =. 0 [,. (? =. * [Az])
(? =. * [AZ])
(? =. * [ 0-9])
(? =. * [* _% $ @])
(?!. * [PPoO])
\ S {6,}
$ /
Конфигурация:
Перейдите в интерфейс администрирования -> Настройки моей учетной записи-> Политика паролей
Здесь вы можете:
- Запретить пользователям изменять свои пароли
- Напишите свое регулярное выражение
- Добавьте информацию о пользователе в случае ошибок ввода
- Разрешите двухфакторную аутентификацию
Примечание. Пароль по умолчанию должен содержать не менее 3 символов и не более 20.
Не забудьте нажать на Подтвердить !
Вы также можете включить двухфакторную аутентификацию:
Чтобы включить двухфакторную аутентификацию,
- Установите флажок «Разрешить двухфакторную аутентификацию».
- Нажмите на опцию двойной аутентификации и нажмите на активацию
- Загрузите приложение аутентификатора Google, отсканируйте код и введите код с помощью аутентификатора Google
- После завершения этих шагов, каждый раз, когда вы входите в систему, вам будет предложено ввести код, сгенерированный в приложении Google Authenticator, в дополнение к идентификатору пользователя, паролю и коду компании.
Добавить комментарий