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

Вопрос:Как я могу сделать следующую ошибку regex игнорировать регистр? Он должен соответствовать всем правильным символам, но игнорировать, имеют ли они нижний или верхний регистр. G[a-b].* Лучший ответ: Предполагая, что вы хотите, чтобы регулярное выражение целое игнорировало регистр, вы должны искать флаг i. Почти все регулярные двигатели поддерживают его: /G[a-b].*/i string.match("G[a-b].*", "i") Проверьте документацию для вашего

Вопрос:

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

G[a-b].* Лучший ответ:

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

/G[a-b].*/i string.match(«G[a-b].*», «i»)

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

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

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

    (?i)G[a-b](?-i).*

  • Поместите все вариации (то есть в нижнем и верхнем регистре) в регулярное выражение – полезно, если модификаторы режима не поддерживаются:

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

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

Ответ №1

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

(?i)G[a-b].

ВАРИАЦИИ:

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

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

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

Ответ №2

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

Ответ №3

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

(?i)(abc) Ответ №4

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

std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase); if (std::tr1::regex_match(szString, pattern)) { … } Ответ №5

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

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

Ответ №6

С#

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

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

Ответ №7

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

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

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

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

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

Ссылки:

Ответ №8

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

Ответ №9

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

Regex(String pattern, RegexOption option)

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

option = RegexOption.IGNORE_CASE Ответ №10

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

Оцените статью
Добавить комментарий