Как я могу сделать следующую чувствительность к регистру, игнорирующую регистр? Он должен соответствовать всем правильным символам, но игнорировать, имеют ли они нижний или верхний регистр.Regex: игнорировать чувствительность к регистру
G[a-b].*
Как я могу сделать следующую чувствительность к регистру, игнорирующую регистр? Он должен соответствовать всем правильным символам, но игнорировать, имеют ли они нижний или верхний регистр.Regex: игнорировать чувствительность к регистру
G[a-b].*
Предполагая, что вы хотите всего regex игнорировать регистр, вы должны искать i
flag. Почти все регулярные выражения двигателей поддерживают его:
/G[a-b].*/i
string.match("G[a-b].*", "i")
Проверьте документацию для вашего языка/платформы/инструмента, чтобы найти, как задаются режимы согласования.
Если вы хотите только части из регулярных выражений, чтобы быть чувствителен к регистру (как предполагается, мой первоначальный ответ), то у вас есть два варианта:
Используйте (?i)
и [необязательно] (?-i)
модификаторов режима:
(?i)G[a-b](?-i).*
Поместите все варианты (т.е. в нижнем регистре и в верхнем регистре) в регулярном выражении - полезно, если модификаторы режима не поддерживаются:
[gG][a-bA-B].*
последнее замечание: если вы имеете дело с символами Unicode, кроме ASCII, проверьте или не должным образом их поддерживает ваш движок регулярных выражений.
Блестящий! Работает для: perl -pe 's/^ utf-8 \? B \?. * $ // gi' Cancer.1631, сопоставление/замена строки "UTF-8? B?" в файле Cancer.1631. Это не удается: perl -pe's/^ utf-8 \? B \?. * $ // g 'Cancer.1631, из-за несоответствия случая. –
Флаг i
обычно используется для чувствительности к регистру. Вы здесь не говорите, но, вероятно, это будет что-то вроде /G[a-b].*/i
.
Зависит от реализации , но я хотел бы использовать
(?i)G[a-b].
Это модификатор формата для регулярного выражения TortoiseHg. – mwolfe02
Не могли бы вы рассказать, как это может быть достигнуто в оболочке Linux (например, в egrep без использования «-i»)? –
Это отлично работает в C# –
Просто для полноты картины я хотел добавить решение для регулярных выражений в C++ с использованием Unicode:
std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase);
if (std::tr1::regex_match(szString, pattern))
{
...
}
Может кто-нибудь уточнить мне, почему этот пост был downvoted? В принятом решении используется конкретный код, и для полноты я хотел добавить решение для стандартных библиотек языка C++. По-моему, я добавил добавленную стоимость к более общему вопросу. – Frankenstein
Вы также можете привести ваша начальная строка, которую вы собираетесь проверить на соответствие шаблону, в нижнем регистре. И использование в ваших шаблонах нижнего регистра соответственно.
Как я узнал из этого похожего сообщения (ignorecase in AWK), в старых версиях awk (например, на Mac OS X) вам может понадобиться 'tolower($0) ~ /pattern/'
.
IGNORECASE
или (?i)
или /pattern/i
либо генерирует ошибку, либо возвращает true для каждой строки.
[Гг] [Аабб]. * Вероятно Simples решение, если шаблон не слишком сложно или долго.
с удовольствием узнает, почему этот ответ неверен для данного вопроса? –
Просто выполните как верхний регистр, так и строчный регистр, включенный в регулярное выражение или преобразованный в верхний регистр, прежде чем выполнять регулярное выражение, соответствующее –
G [a-bA-B].* будет очевидным в этом общем случае, чувствительность к регистру зависит от платформы afaik, и вы не даете платформу. –
Если вы используете Java, вы можете указать это с помощью класса Pattern: 'Pattern pattern = Pattern.compile (regex, Pattern.CASE_INSENSITIVE);'. –