Regex: игнорировать чувствительность к регистру

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

G[a-b].*

Ответ 1

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

/G[a-b].*/i

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

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

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

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

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

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

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

Ответ 2

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

(?i)G[a-b].

ВАРИАЦИИ:

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

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

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

Ответ 3

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

Ответ 4

регулярное выражение для проверки "abc" игнорирование чувствительности к регистру

(?i)(abc)

Ответ 5

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

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

if (std::tr1::regex_match(szString, pattern))
{
...
}

Ответ 6

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

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

Ответ 7

С#

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

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

Ответ 8

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

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

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

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

Пример: см. выражение и объяснение на этом изображении.

enter image description here

Ссылки:

Ответ 9

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

Ответ 10

В Java конструктор Regex имеет

Regex(String pattern, RegexOption option)

Чтобы игнорировать дела, используйте

option = RegexOption.IGNORE_CASE

Ответ 11

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