Регулярное выражение, сопоставляющее символы верхнего регистра с поиском в нижнем регистре

Я использую notepad ++ и обнаружил, что, когда я использую регулярное выражение для поиска строк, в которых я специально хочу найти строчные буквы («[a-z]»), он иногда возвращает прописные буквы.

Первоначально я искал, используя строку:

^[A-Z][a-z].+?$

С целью удаления любой строки в моем файле, которая начинается с символа верхнего регистра, за которым следует строчная буква, за которой следует что-либо до конца строки. Однако это вернуло такие строки, как «CLONE» и «DISEASE», которые были только заглавными буквами. Из любопытства попробовал:

^[a-z].+?$

И он по-прежнему возвращал эти строки заглавными буквами. Наконец, я попробовал:

^[\u0061-\u007A].+?$

И он по-прежнему возвращал строки текста с заглавными буквами. Есть ли что-то за пределами моих скобок, что вызывает это?


person Phil Dinius    schedule 19.08.2014    source источник
comment
Установлен ли флажок "Учитывать регистр"?   -  person Trudbert    schedule 19.08.2014
comment
Во первых - вау. Нет, не было. Спасибо, ха-ха! Но во-вторых, когда я выполнял поиск с использованием юникода для чисел от a до z, он по-прежнему возвращал все строки с заглавными буквами, даже если установлен флажок Match Case. Если я буквально наберу [A-Z] [a-z], он сделает то, что я хочу. Спасибо!   -  person Phil Dinius    schedule 19.08.2014
comment
[A-Z][a-z] - это верхний регистр, за которым следует нижний регистр ... [A-Za-z] - верхний или нижний регистр   -  person Captain    schedule 19.08.2014


Ответы (1)


Как и многие другие текстовые редакторы, Notepad ++ предоставляет глобальную опцию для Match case. Даже если ваше выражение не содержит внутреннего модификатора (?i), результаты могут быть неожиданными в зависимости от того, установлено ли Match case в ON или OFF.

Итак, ваши строки ALLCAPS допустимы для ^[A-Z][a-z].+?$, потому что буквы сопоставляются без учета регистра, когда Match case ВЫКЛ.

Установите флажок Match case, чтобы включить чувствительность к регистру при поиске по регулярным выражениям:

введите описание изображения здесь

ДРУГИЕ СПОСОБЫ ПРЕОБРАЗОВАТЬ ЧУВСТВИТЕЛЬНОСТЬ ДЕЛА

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

  • (?-i)[A-Z][a-z]* будет соответствовать только прописной букве, за которой следует строчная, поскольку (?-i) включает чувствительность к регистру
  • (?i)[A-Z][a-z]* соответствует 1 или более прописным или строчным буквам
  • (?-i)[a-z](?i)[a-f](?-i)[a-z] будет соответствовать строчной букве, затем строчной или прописной букве от a до f и от A до F, а затем снова будет соответствовать строчной букве
  • S(?i:[a-z])S - S или s будет соответствовать S (в зависимости от настроек среды, например Match case), затем любой заглавной или строчной букве, а затем _20 _ / _ 21_.
person Wiktor Stribiżew    schedule 21.08.2015