Регулярные выражения -Примеры
Простые выражения
Простейшая форма регулярного выражения — это один обычный символ, который совпадает с самим собой в строке поиска.
Например, шаблон из одного символа, такой как a, всегда совпадает с буквой a, где бы она ни встречалась в строке поиска. Ниже приведены некоторые примеры шаблонов регулярных выражений из одного символа:
Регулярное выражение точно совпадёт со строкой "abc". Где бы эта строка ни встречалась в тексте, оно сработает только при точном совпадении с "abc".
Обратите внимание, что это очень простой пример, поскольку строка "abc" сама по себе не содержит специальных метасимволов или шаблонов. Поэтому её можно использовать непосредственно как регулярное выражение без дополнительного экранирования или квантификаторов.
Сопоставление символов
Подстановочные знаки.
Точка.Совпадает с любым одиночным символом, кроме символа новой строки.\nи\rСледующее регулярное выражение соответствует aac, abc, acc, adc и т. д., а также a1c, a2c, a-c и a#c:
Чтобы сопоставить строку, содержащую имя файла, в которой точка.является частью входной строки, поставьте обратную косую черту перед точкой в регулярном выражении.\символ. Например, следующее регулярное выражение соответствует filename.ext:
/filename\.ext/
Квантификаторы*
Соответствует предыдущему элементу ноль или более раз:
Это выражение может соответствовать таким строкам, как "b", "ab", "aab", "aaab", и т. д.
Квантификаторы+
Соответствует предыдущему элементу один или более раз:
Это выражение может соответствовать таким строкам, как "ab", "aab", "aaab", и т. д., но не соответствует "b".
Квантификаторы?
Соответствует предыдущему элементу ноль или один раз:
Это выражение может соответствовать "color" или "colour".
Выше приведены некоторые распространённые примеры сопоставления шаблонов с одним символом. Они могут использоваться для гибкого сопоставления и поиска строк с различными шаблонами.
Обратите внимание, что синтаксис регулярных выражений может различаться в зависимости от языка программирования и инструмента, поэтому при практическом использовании обращайтесь к соответствующей документации.
Разумное регулярное выражение для имени пользователя
Имя пользователя может содержать следующие типы символов:
- 1. 26 прописных и строчных английских букв обозначаются какa-zA-Z。
- 2. Цифры обозначаются как0-9。
- 3. Символ подчёркивания обозначается как_。
- 4. Дефис обозначается как-。
Имя пользователя состоит из некоторого количества букв, цифр, символов подчёркивания и дефисов, поэтому нужно использовать+для обозначения1одного или нескольких вхождений.
Исходя из вышеуказанных условий, выражение для имени пользователя может быть таким:
[a-zA-Z0-9_-]+
Примеры
Следующий отмеченный текст — это выражение, с помощью которого были получены совпадения:
Попробуйте »
Если дефисы не нужны, то это:
[a-zA-Z0-9_]+
Примеры
Следующий отмеченный текст — это выражение, с помощью которого были получены совпадения:
abc123_def
Попробуйте »
Сопоставление HTML-тегов и содержимого
Следующее регулярное выражение используется для сопоставления тегов iframe:
/<iframe(([\s\S])*?)<\/iframe>/
Для сопоставления других тегов можно заменитьiframe 。
Сопоставьте тег div с id="mydiv":
/<div id="mydiv"(([\s\S])*?)<\/div>/
Сопоставьте все теги img:
Выражения в квадратных скобках
Чтобы создать список, который соответствует группе символов, используйте квадратные скобки[ ]Поместите внутрь них один или несколько одиночных символов. Когда символы заключены в квадратные скобки, список называется «выражением в квадратных скобках». Как и везде, обычные символы внутри квадратных скобок представляют сами себя, то есть они совпадают с самими собой один раз во входном тексте. Большинство специальных символов теряют своё значение, когда появляются внутри выражения в квадратных скобках. Однако есть некоторые исключения, например:
- Если символ]не является первым элементом, он завершает список. Чтобы сопоставить символ]в списке, поместите его первым, сразу после открывающей[скобки.
- \Символ продолжает служить экранирующим символом. Чтобы сопоставить символ\, используйте\\。
Символы, заключённые в выражение в квадратных скобках, соответствуют только одному символу в этой позиции регулярного выражения. Следующее регулярное выражение соответствует Chapter 1, Chapter 2, Chapter 3, Chapter 4 и Chapter 5:
/Chapter [12345]/
Обратите внимание, что позиции слова Chapter и пробела после него фиксированы относительно символов внутри квадратных скобок. Выражение в квадратных скобках задаёт только набор символов, который соответствует позиции одного символа сразу после слова Chapter и пробела. Это девятая позиция символа.
Чтобы использовать диапазон вместо перечисления самих символов для представления группы совпадающих символов, используйте дефис-для разделения начального и конечного символов диапазона. Кодовые значения отдельных символов определяют относительный порядок внутри диапазона. Следующее регулярное выражение содержит выражение диапазона, эквивалентное списку в квадратных скобках, показанному выше.
/Chapter [1-5]/
При указании диапазона таким способом и начальное, и конечное значение включаются в диапазон. Обратите внимание, что также важно, чтобы начальное значение шло перед конечным значением в порядке сортировки Unicode.
Чтобы включить дефис в выражение в квадратных скобках, используйте один из следующих методов:
- Экранируйте его с помощью обратной косой черты:
[\-]
- Поместите дефис в начало или конец списка в квадратных скобках. Следующее выражение соответствует всем строчным буквам и дефису:
[-a-z] [a-z-]
- Создайте диапазон, в котором значение начального символа меньше дефиса, а значение конечного символа больше или равно дефису. Оба следующих регулярных выражения удовлетворяют этому требованию:
[!--] [!-~]
Чтобы найти все символы, не входящие в список или диапазон, поместите символ каретки^в начало списка. Если символ каретки встречается где-либо еще в списке, он соответствует самому себе. Следующее регулярное выражение соответствует любой цифре или символу, отличному от 1, 2, 3, 4 или 5:
/Chapter [^12345]/
В приведенном выше примере выражение соответствует любой цифре или символу, отличному от 1, 2, 3, 4 или 5, в девятой позиции. Так, например, Chapter 7 является совпадением, и Chapter 9 также является совпадением.
Приведенное выше выражение может использовать дефис-для обозначения:
/Chapter [^1-5]/
Типичное использование выражения в квадратных скобках — указать совпадение для любой заглавной или строчной буквы или любой цифры. Следующее выражение задает такое совпадение:
/[A-Za-z0-9]/
Альтернация и группировка
Альтернация использует|символ, чтобы обеспечить выбор между двумя или более вариантами альтернации. Например, вы могли бы расширить регулярное выражение для заголовка главы, чтобы возвращать совпадения шире, чем заголовки глав. Однако это не так просто, как вы могли бы подумать. Альтернация соответствует|наибольшее выражение с любой стороны от символа.
Вы можете подумать, что следующее выражение соответствует Chapter или Section, появляющимся в начале или конце строки, за которыми следует одна или две цифры:
/^Chapter|Section [1-9][0-9]{0,1}$/
К сожалению, приведенное выше регулярное выражение либо соответствует слову Chapter в начале строки, либо слову Section в конце строки вместе с любыми цифрами, следующими за ним. Если входная строка — Chapter 22, приведенное выше выражение соответствует только слову Chapter. Если входная строка — Section 22, выражение соответствует Section 22.
Чтобы сделать регулярное выражение более управляемым, можно использовать круглые скобки, чтобы ограничить область действия альтернации, то есть гарантировать, что она применяется только к двум словам Chapter и Section. Однако круглые скобки также используются для создания подвыражений и могут захватывать их для дальнейшего использования, как описано в разделе об обратных ссылках. Добавив круглые скобки в нужных местах приведённого выше регулярного выражения, можно добиться того, чтобы оно соответствовало Chapter 1 или Section 3.
Следующее регулярное выражение использует круглые скобки для группировки Chapter и Section, чтобы выражение работало правильно:
/^(Chapter|Section) [1-9][0-9]{0,1}$/
Хотя эти выражения работают правильно, круглые скобки вокруг Chapter|Section также захватят любое из двух совпавших слов для дальнейшего использования. Поскольку в приведённом выше выражении есть только одна группа круглых скобок, имеется только одно захваченное "подсовпадение".
В приведённом выше примере вы просто используете круглые скобки, чтобы сгруппировать выбор между словами Chapter и Section. Чтобы совпадение не сохранялось для дальнейшего использования, поставьте?:. Следующее изменение обеспечивает ту же возможность без сохранения подсовпадений:
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/
divide?:Помимо метасимволов, два других незахватывающих метасимвола создают так называемое сопоставление с "просмотром вперёд". Положительный просмотр вперёд использует?=для указания; он сопоставляет искомую строку в начальной точке шаблона регулярного выражения внутри круглых скобок. Отрицательный просмотр вперёд использует?!для указания; он сопоставляет искомую строку в начальной точке строки, которая не соответствует шаблону регулярного выражения.
Например, предположим, у вас есть документ, содержащий ссылки на Windows 3.1, Windows 95, Windows 98 и Windows NT. Далее предположим, что вам нужно обновить документ, чтобы заменить все ссылки на Windows 95, Windows 98 и Windows NT на Windows 2000. Следующее регулярное выражение (пример положительного просмотра вперёд) соответствует Windows 95, Windows 98 и Windows NT:
/Windows(?=95 |98 |NT )/
После того как найдено совпадение, следующее совпадение ищется сразу после совпавшего текста (не включая символы в опережающем просмотре). Например, если приведённое выше выражение совпадает с Windows 98, поиск продолжается после Windows, а не после 98.
Другие примеры
Ниже перечислены некоторые примеры регулярных выражений:
| Регулярное выражение | Описание |
|---|---|
/\b([a-z]+) \1\b/gi |
Совпадает с позицией, где слово встречается подряд. |
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ |
Совпадает с URL, разобранным на протокол, домен, порт и относительный путь. |
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ |
Находит позицию раздела. |
/[-a-z]/ |
26 букв от a до z, плюс один-знак. |
/ter\b/ |
Совпадает с chapter, но не с terminal. |
/\Bapt/ |
Совпадает с chapter, но не с aptitude. |
/Windows(?=95 |98 |NT )/ |
Совпадает с Windows95, Windows98 или WindowsNT; после того как найдено совпадение, следующий поиск начинается после Windows. |
/^\s*$/ |
Совпадает с пустыми строками. |
/\d{2}-\d{5}/ |
Проверяет ID, состоящий из двух цифр, дефиса и пяти цифр. |
<[a-zA-Z]+.*?>([\s\S]*?)</[a-zA-Z]*?> |
Совпадает с HTML-тегами. |
| Регулярное выражение | Описание |
|---|---|
hello
| Совпадает с {hello} |
gray|grey
| Совпадает с {gray, grey} |
gr(a|e)y
| Совпадает с {gray, grey} |
gr[ae]y
| Совпадает с {gray, grey} |
b[aeiou]bble
| Совпадает с {babble, bebble, bibble, bobble, bubble} |
[b-chm-pP]at|ot
| Совпадает с {bat, cat, hat, mat, nat, oat, pat, Pat, ot} |
colou?r
| Совпадает с {color, colour} |
rege(x(es)?|xps?)
| Совпадает с {regex, regexes, regexp, regexps} |
go*gle
| Совпадает с {ggle, gogle, google, gooogle, goooogle, ...} |
go+gle
| Совпадает с {gogle, google, gooogle, goooogle, ...} |
g(oog)+le
| Совпадает с {google, googoogle, googoogoogle, googoogoogoogle, ...} |
z{3}
| Совпадает с {zzz} |
z{3,6}
| Совпадает с {zzz, zzzz, zzzzz, zzzzzz} |
z{3,}
| Соответствует {zzz, zzzz, zzzzz, ...} |
[Bb]rainf\*\*k
| Соответствует {Brainf**k, brainf**k} |
\d
| Соответствует {0,1,2,3,4,5,6,7,8,9} |
1\d{10}
| Соответствует 11 цифрам, начинающимся с 1 |
[2-9]|[12]\d|3[0-6]
| Соответствует целым числам в диапазоне от 2 до 36 |
Hello\nworld
| Соответствует Hello, за которым следует символ новой строки, а затем world |
\d+(\.\d\d)?
| Содержит положительное целое число или число с плавающей запятой с двумя знаками после запятой. |
[^*@#]
| Исключает три специальных символа *, @ и # |
//[^\r\n]*[\r\n]
| Соответствует//комментариям, начинающимся с |
^dog
| Соответствует строкам, начинающимся с "dog" |
dog$
| Соответствует строкам, заканчивающимся на "dog" |
^dog$
| в точности равно "dog" |
Больше примеров
-
Регулярные выражения для китайского языка
-
Регулярное выражение для номерного знака автомобиля
-
Регулярное выражение для идентификатора WeChat
-
Регулярное выражение для номера QQ
-
Регулярное выражение для шестнадцатеричного цвета
-
Регулярное выражение для оценки надёжности пароля
Регулярное выражение для имени пользователя
Регулярное выражение для адреса электронной почты