Как я могу сделать следующую ошибку regex игнорировать регистр? Он должен соответствовать всем правильным символам, но игнорировать, имеют ли они нижний или верхний регистр.
G[a-b].*
Как я могу сделать следующую ошибку 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, проверьте, правильно ли поддерживает ваш механизм регулярных выражений.
Зависит от реализации но я бы использовал
(?i)G[a-b].
ВАРИАЦИИ:
(?i) case-insensitive mode ON
(?-i) case-insensitive mode OFF
Современные разновидности регулярных выражений позволяют применять модификаторы только к части регулярного выражения. Если вы вставите модификатор (? Im) в середину регулярного выражения, тогда модификатор применяется только к части регулярного выражения справа от модификатора. С этими вариантами вы можете отключить режимы, поставив перед ними знак минус (? -i).
Описание со страницы:https://www.regular-expressions.info/modifiers.html
Флаг i
обычно используется для нечувствительности к регистру. Вы не даете здесь языка, но, вероятно, это будет что-то вроде /G[ab].*/i
или /(?i)G[ab].*/
.
регулярное выражение для проверки "abc" игнорирование чувствительности к регистру
(?i)(abc)
Просто для полноты я хотел добавить решение для регулярных выражений в С++ с Unicode:
std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase);
if (std::tr1::regex_match(szString, pattern))
{
...
}
Как я узнал из этого похожего сообщения (ignorecase в AWK), в старых версиях awk (например, на ванильной Mac OS X) вам может понадобиться использовать 'tolower($0) ~ /pattern/'
.
IGNORECASE
или (?i)
или /pattern/i
генерирует ошибку или возвращает true для каждой строки.
С#
using System.Text.RegularExpressions;
...
Regex.Match(
input: "Check This String",
pattern: "Regex Pattern",
options: RegexOptions.IgnoreCase)
в частности: параметры: RegexOptions.IgnoreCase
Дополнение к уже принятым ответам:
Обратите внимание, что для grep
это просто добавление модификатора -i
. Пример: grep -rni regular_expression
для поиска этого 'регулярного_экспрессии' 'r' рекурсивно, регистр 'i'nsensitive, показывая строку' n'umbers в результате.
Кроме того, здесь отличный инструмент для проверки регулярных выражений: https://regex101.com/
Пример: см. выражение и объяснение на этом изображении.
man grep
)[gG] [aAbB]. * возможно, простое решение, если шаблон не слишком сложный или длинный.
В Java конструктор Regex
имеет
Regex(String pattern, RegexOption option)
Чтобы игнорировать дела, используйте
option = RegexOption.IGNORE_CASE
Вы также можете привести свою начальную строку, которую вы собираетесь проверить на соответствие шаблону, в нижний регистр. И использование в ваших строчных символах нижнего регистра соответственно.