Систематическое изучение регулярных выражений: основы

Автор:Маленькие мечты, Создано: 2017-03-29 10:52:47, Обновлено: 2020-11-18 12:39:53

Систематическое изучение регулярных выражений: основы

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

  • С помощью правильного выражения можно достичь следующих целей:

    给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
    可以通过正则表达式,从字符串中获取我们想要的特定部分。
    

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

    img

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

  • Совпадение обычных текстовых символов

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

    Обычное выражение:songТекст песни: Xiaosongge, xiaoSongge Результаты сопоставления: xiaosongGe, Xiao Songge По умолчанию регулярные выражения пишутся в больших и малых размерах, поэтому song не совпадает с Song. Однако большинство реализаций регулярных выражений предлагают опцию для неразличительного появления букв.

  • Совпадение любых символов

    . Используется для сопоставления любых символов, например:

    Регулярное выражение: c.t В ожидании соответствия текст: cat cet caaat dog Результаты сопоставления:cat cetКаат Дог Анализ: c.t будет совпадать со строкой, которая начинается с "c" и заканчивается "t", а в середине - с любым символом.

    同理,多个连续的.可以匹配多个连续的任意字符:

    Обычное выражение: c...t В ожидании соответствия текст: cat cet caat dog Результаты сопоставления: cat cetcaatсобака

  • Совпадение особых символов

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

    Регулярное выражение: c.t В ожидании совпадения текст: cat c.t dog Результаты сопоставления: catc.tСобака Примечание: поскольку \ также является специальным символом, для того, чтобы соответствовать истинному \, необходимо использовать две обратные скобки \:

    Обычное выражение: c\t В ожидании совпадения текст: cat c\t dog Результаты сопоставления: catc\tсобака

  • Использование наборов символов

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

    Обычное выражение: c[ab]t В ожидании совпадения текст: cat cbt cet Результаты сопоставления:cat cbtCet Анализ: [ab] совпадает с "a или b . Поэтому c[ab]t совпадает с cat и cbt , но не совпадает с cet".

  • Использование парадных интервалов

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

    Обычное выражение: c[a-z]t В ожидании соответствия текст: cat cbt czt c2t Результаты сопоставления:cat cbt cztc2t Анализ: c[a-z]t обозначает любое из букв "a" - "z" в середине.

    Похожие разделы:

    [0-9] имеет ту же функцию, что и [0123456789]. Совпадает со всеми числами. [A-F] совпадает с A до F с большими буквами. [A-Z] совпадает со всеми буквами с A по Z. [a-z] совпадает со всеми буквой от a до z. [A-z] совпадает со всеми символами ASCII от A до ASCII z ((не только совпадает со всеми буквами, но также совпадает с символами в таблице ASCII от A до z, такими как [ и ^ и т. д.)). [A-Za-z0-9] Совпадает со всеми буквы и цифры в больших и малых числах.

  • Совпадение несеток

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

    Обычное выражение: c[^a-z]t В ожидании соответствия текст: cat cbt czt c2t cAt Совпадения: cat cbt cztc2t cAtАнализ: это прямо противоположно предыдущему примеру. [a-z] совпадает со всеми буквы, написанными малой буквой, в то время как [^a-z] совпадает со всеми символами, не написанными малой буквой.

    Обратите внимание, что ^ - это отмена совпадения всех символов в наборе символов.

  • Первоначальные символы

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

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

    Обычное выражение: a[b] В ожидании совпадения текста: a[b ab a[[b Результаты сопоставления:a[bab a[[b Примечание: \ используется для преобразования элементарных символов, что также означает, что \ также является мета-характером. Так что если вам нужно сопоставить истинное \, вы можете использовать \:

    Регулярное выражение: a\b В ожидании совпадения текста: a\b a\b a[[b Результаты сопоставления: a\ba\ba[[b

  • Пустые символы

    Иногда вам может понадобиться сопоставить неприпечатанные в тексте пробелы. Например, вы хотите найти все символы Tab или все символы замены. Вы можете использовать специальные мета-чертежи в таблице:

    img

    Например, \r\n будет совпадать с комбинацией обратного переключения, что в Windows означает переключение файла.

  • Совпадение с конкретными типами символов

    Существуют специальные мета-символы, которые можно использовать для сопоставления с обычными наборами символов. Эти мета-символы называются классами сопоставления. Вы найдете их удобными в использовании.

    Совпадение чисел или нечисел Выше говорилось, что можно сопоставить все числа. Если вы не хотите сопоставить ни одного числа, вы можете использовать [^0-9]. Ниже приведена таблица, в которой перечислены цифровые и нецифровые элементы класса:

    img

    Обычное выражение: c\dt В ожидании соответствия текст: cat c2t czt c9t Результаты сопоставления: catc2tcztc9t

    Обычное выражение: c\Dt В ожидании соответствия текст: cat c2t czt c9t Результаты сопоставления:catc2tcztc9t Сопоставление алфавитных и неалфавитных символов Еще один обычный классный метокрактер - \w и \W:

    img

    Обычное выражение: c\wt В ожидании совпадения текст: cat c2t czt c-t c\t Результаты сопоставления:cat c2tС-т с\т

    Обычное выражение: c\Wt В ожидании совпадения текст: cat c2t c-t c\t Результаты сопоставления: cat c2tc-t c\tСопоставление пустоты и не пустоты Последнее совпадение, с которым мы столкнемся, - это белый класс:

    img

    Обычное выражение: c\st В ожидании совпадения текст: cat c t c2t c \ t Результаты сопоставления: catc tc2t c\t

    Обычное выражение: c\St В ожидании совпадения текст: cat c t c2t c\t Результаты сопоставления:catc tc2t c\t

  • Совпадение одного или более символов

    Мета + означает совпадение одного или нескольких символов. Например, a будет совпадать с "a", а a + совпадает с одним или несколькими "a".

    Обычное выражение: cat В ожидании совпадения текст: ct cat caat caaat Результаты сопоставления: ctcatКааааа

    Обычное выражение: ca+t В ожидании совпадения текст: ct cat caat caaat Результаты сопоставления: ctcat caat caaatКогда + используется в наборе символов, символ + необходимо поместить за пределами набора:

    Обычное выражение: c[0-9]+t В ожидании совпадения текст: ct c0t cat c123t Результаты сопоставления: ctc0tкошкаc123tАнализ: c[0-9]+t обозначает строку, которая начинается с "c и заканчивается t", а посередине - один или несколько цифр.

    Конечно, [0-9+] также является законным регулярным выражением, но оно обозначает набор символов, содержащих символы "0" - "9" и "+"。

    Обычно мета-персонажи, такие как. и +, используются в качестве буквального значения, когда используются в наборе символов, поэтому нет необходимости в переводе. Но это также нормально, поэтому функции [0-9+] и [0-9+] одинаковы.

    Примечание: + - это мета-персонаж, для сопоставления "+" требуется использовать преобразование +。

  • Совпадает с нулем или больше символов

    Если вы хотите сопоставить нуль или больше символов, вы можете использовать * мета-символ.

    Обычное выражение: ca*t В ожидании соответствия текст: ct cat caat cbt Результаты сопоставления:ct cat caatcbt Примечание:* Символы являются мета-персонажами. Для того, чтобы соответствовать "*", необходимо сделать преобразование *.

  • Сопоставьте нули или символы.

    ? совпадает с нулем или одним символом.

    Обычное выражение: ca?t В ожидании соответствия текст: ct cat caat cbt Результаты сопоставления:ct catcaat cbt Примечание:? символ является мета-характером.. Для того, чтобы соответствовать "? ", необходимо сделать преобразование?.

  • Использовать количество совпадений

    Обычное выражение позволяет указывать количество совпадений. Количество может быть указано между { и } . Примечание: {и} также являются метахарактерами, которые требуют перевода при использовании буквального значения.

    Точное количество совпадений Для указания количества случаев совпадения вы можете ввести цифры между {и}. Например, {3} будет совпадать с символом или набором, который появился 3 раза ранее:

    Обычное выражение: ca{3}t В ожидании совпадения текст: ct cat caaat cbt Результаты сопоставления: ct catcaaatcbt По крайней мере, количество совпадений Мы также можем указать только минимальное значение совпадения. Например, {2,} означает совпадение 2 или более раз:

    Обычное выражение: ca{1,} t В ожидании совпадения текст: ct cat caaat cbt Результаты сопоставления: ctcat caaatcbt Совпадение между числами Мы также можем использовать минимальные и максимальные значения для определения количества совпадений. Например, {2,3} означает минимум 2 совпадений и максимум 3 совпадений.

    Обычное выражение: ca{2,3}t В ожидании совпадения текст: ct cat caaat cbt Результаты сопоставления: ct catcaaatcbt Таким образом,? и {0,1} имеют ту же функцию + и {1,} имеют ту же функцию.

  • Не жадные совпадения

    Например:

    Обычное выражение: s.*g Ожидание совпадения текст: xiao song xiao song После сопоставления: xiao song xiao song Анализ: s.*g не совпадает с двумя песнями, как предполагается, а совпадает со всем текстом между первым песней s и последним g.

    Это потому, что * и + - это жадные совпадения. То есть, регулярные выражения всегда ищут наибольшую, а не наименьшую совпадение, что преднамеренно сделано.

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

    img

    Да, конечно.Если вы хотите, чтобы ваш сайт стал более доступным для пользователей, вы можете использовать *?

    正则表达式:s.?g Ожидание совпадения текст: xiao song xiao song Результаты сопоставления: xiaosongСуаоsong 分析:可以看到s.? g совпадает с двумя песнями.

  • Определение границ строки

    Метакристаллы, с которыми совпадают границы строки, - это ^ и $, которые используются для начала и конца строки, соответственно.

    ^ Используется следующим образом:

    Обычное выражение: ^ xiao

    В ожидании совпадения текст:xiaosong Результаты сопоставления:xiaoПесня

    В ожидании соответствия текст: axiaosong Сравнение: axiaosong Анализ: ^xiao совпадает со строкой, начинающейся с "xiao".

    $ используется следующим образом:

    Официальное выражение: song$

    В ожидании совпадения текст:xiaosong Результаты сопоставления: xiaosong

    В ожидании совпадения текст:xiaosonga Результаты сопоставления: Xiaosonga Анализ: песня $ совпадает со строкой, заканчивающейся на "song".

    Совместное использование:

    Обычное выражение: ^ [0-9a-zA-Z] {4,} $

    В ожидании соответствия текст: a1b234ABC Результаты сопоставления:a1b234ABC

    Текст для сопоставления: +a1b23=4ABC Результат сопоставления: +a1b23 = 4ABC Анализ: ^[0-9a-zA-Z]{4,} $ содержит совпадение числа или буквы, и число цифр больше, чем четыре цифры строки;

    Примечание: ^ означает отрицательное, если оно находится в начале множества; если оно находится вне множества, то оно будет соответствовать началу строки.

  • Использование многострочного режима

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

    Измените предыдущий пример:

    Обычное выражение: ((?m) ^ [0-9a-zA-Z]{4,}$

    В ожидании соответствия текст: a1b234ABC +a1b23 = 4ABC ABC123456

    Результаты сопоставления:a1b234ABC+a1b23=4ABCABC123456Анализ: ((?m) ^ [0-9a-zA-Z]{4,} $ будет совпадать с числом или буквой в каждой строке, и число цифр будет больше, чем четыре цифры в строке.

    Примечание: если используется многострочный режим, то ((?m) должен быть помещен в начале регулярного выражения. (?m) не поддерживается в большинстве реализаций регулярных выражений. Некоторые реализации регулярных выражений также поддерживают использование \A для начала и \Z для конца соответствующей строки. Если это поддерживается, то эти метахарактеры выполняют ту же функцию, что и ^, $.

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

Переведено с английского языка


Больше