Вопрос:
Как я могу сделать следующую ошибку 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/
Пример: см. выражение и объяснение на этом изображении.
Ссылки:
- справочные страницы (man grep)
- http://droptips.com/using-grep-and-ignoring-case-case-insensitive-grep
Ответ №8
[gG] [aAbB]. * возможно, простое решение, если шаблон не слишком сложный или длинный.
Ответ №9
В Java конструктор Regex имеет
Regex(String pattern, RegexOption option)
Чтобы игнорировать дела, используйте
option = RegexOption.IGNORE_CASE Ответ №10
Вы также можете привести свою начальную строку, которую вы собираетесь проверить на соответствие шаблону, в нижний регистр. И использование в ваших строчных символах нижнего регистра соответственно.