Регулярное выражение: игнорировать чувствительность к регистру - PullRequest
241 голосов
/ 11 марта 2012

Как я могу заставить следующее регулярное выражение игнорировать регистр?Он должен соответствовать всем правильным символам, но игнорировать, являются ли они строчными или прописными буквами.

G[a-b].*

Ответы [ 10 ]

334 голосов
/ 11 марта 2012

Предполагая, что вы хотите, чтобы регулярное выражение whole игнорировало регистр, вы должны искать флаг i . Почти все движки регулярных выражений поддерживают это:

/G[a-b].*/i

string.match("G[a-b].*", "i")

Проверьте документацию для вашего языка / платформы / инструмента, чтобы узнать, как заданы соответствующие режимы.

Если вы хотите, чтобы только часть регулярного выражения была без учета регистра (как предполагал мой первоначальный ответ), тогда у вас есть два варианта:

  1. Используйте модификаторы режима (?i) и [опционально] (?-i):

    (?i)G[a-b](?-i).*
    
  2. Поместить все варианты (то есть строчные и прописные) в регулярное выражение - полезно, если модификаторы режима не поддерживаются:

    [gG][a-bA-B].*
    

Последнее замечание: если вы имеете дело с символами Юникода, кроме ASCII, проверьте, правильно ли поддерживает их ваш движок регулярных выражений.

110 голосов
/ 11 марта 2012

Зависит от реализации но я бы использовал

(?i)G[a-b].

ВАРИАЦИИ:

(?i) case-insensitive mode ON    
(?-i) case-insensitive mode OFF

Современные разновидности регулярных выражений позволяют применять модификаторы только к части регулярного выражения. Если вы вставите модификатор (? Im) в середину регулярного выражения, тогда модификатор применяется только к части регулярного выражения справа от модификатора. С этими ароматами вы можете отключить режимы, поставив перед ними знак минус (? -I).

Описание со страницы: https://www.regular -expressions.info / modifiers.html

45 голосов
/ 11 марта 2012

Флаг i обычно используется для нечувствительности к регистру.Вы не даете здесь языка, но это, вероятно, будет что-то вроде /G[a-b].*/i.

43 голосов
/ 11 декабря 2015

регулярное выражение для проверки 'abc', игнорирующее регистр

(?i)(abc)
14 голосов
/ 19 марта 2013

Просто для полноты картины я хотел добавить решение для регулярных выражений в C ++ с Unicode:

std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase);

if (std::tr1::regex_match(szString, pattern))
{
...
}
4 голосов
/ 08 ноября 2014

Как я обнаружил из этого аналогичного поста ( игнорировать в AWK ), в старых версиях awk (например, в vanilla Mac OS X) вам может понадобиться 'tolower($0) ~ /pattern/'.

IGNORECASE или (?i) или /pattern/i либо сгенерируют ошибку, либо вернут true для каждой строки.

1 голос
/ 18 октября 2018

Добавление к уже принятым ответам:

Использование Grep:

Обратите внимание, что для grep ing это просто добавление модификатора -i.Пример: grep -rni regular_expression для поиска этого 'регулярного_экспрессии' 'r'ecursively, case' i'nsensitive, показывая строки 'n'umbers в результате.

Также, вот отличный инструмент для проверки регулярных выражений:https://regex101.com/

Пример: см. Выражение и объяснение на этом рисунке.

enter image description here

Ссылки:

0 голосов
/ 04 ноября 2018

C #

using System.Text.RegularExpressions;
...    
Regex.Match(
    input: "Check This String",
    pattern: "Regex Pattern",
    options: RegexOptions.IgnoreCase)

, в частности: параметры: RegexOptions.IgnoreCase

0 голосов
/ 13 сентября 2017

[gG] [aAbB]. * Возможно, упрощает решение, если шаблон не слишком сложный или длинный.

0 голосов
/ 17 января 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...