Подтвердить что ты не робот

Что означают `? I` и`? -i` в регулярном выражении?

Может ли кто-нибудь объяснить, что означают (?i) и (?-i) обертывание слова в регулярном выражении?

(?i)test(?-i)

Я тестировал, и он соответствует test, test и test. Но я никогда раньше этого не видел. Что означает ? до i? Я видел здесь здесь.

4b9b3361

Ответ 1

(?i) запускает нечувствительный к регистру режим

(?-i) отключает нечувствительный к регистру режим

Дополнительная информация в "Включение и выключение режимов для частичного выражения" этой страницы:

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

Не все ароматы регулярных выражений поддерживают это. JavaScript и Python применяют все модификаторов режима для всего регулярного выражения. Они не поддерживают синтаксис (? -ismx), так как выключение опции бессмысленно, когда Модификаторы режима применяются ко всем регулярным выражениям. Все варианты по умолчанию.

Вы можете быстро проверить, как вы используете режим regex, который вы используете в ручном режиме модификаторы. Регулярное выражение (? I) te (? - i) st должно соответствовать тесту и TEst, но не teST или TEST.

Ответ 2

(?i) включается нечувствительный к регистру режим, (?-i) отключает его.

Например, если вы пробовали (?i)te(?-i)st, он соответствовал бы тесту, TEst, tEst, но не teST.

Ответ 3

Взято непосредственно из рубиновых документов.

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

/pat/i - Игнорировать регистр

/pat/m - обрабатывать символ новой строки как символ, сопоставляемый.

/pat/x - игнорировать пробелы и комментарии в шаблоне

/pat/o → Выполнить # {} интерполяцию только один раз

i, m и x также могут применяться на уровень подвыражения с конструкцией (? on-off), которая позволяет options on и отключает опции для выражения, заключенного в круглые скобки.