Что такое '?-Mix' в регулярном выражении Ruby
Просто пытаюсь отладить регулярное выражение в ruby. Когда я печатаю содержимое регулярного выражения, оно показывает ?-mix
в начале регулярного выражения, хотя эти символы не были частью выражения. Пожалуйста, посмотрите следующий вывод IRB, чтобы увидеть это
irb(main):028:0* EXPR = /^a$/
=> /^a$/
irb(main):029:0> EXPR
=> /^a$/
irb(main):030:0> puts EXPR
(?-mix:^a$)
=> nil
Как вы можете видеть, когда вы используете puts
распечатать содержимое регулярного выражения, есть ?-mix
в начале. Должен ли я быть обеспокоен этим? Откуда это?
2 ответа
mix
это не английское слово mix, это варианты Regexp
,
Увидеть Regexp#to_s
:
Возвращает строку, содержащую регулярное выражение и его параметры (используя (
?opts:source
) обозначение.
В вашем примереm
длямногострочного режима, i
нечувствителен к регистру, и x
для расширенного режима. Опции перед чертой включены, те после выключены (по умолчанию). Пример вопроса, ?-mix
, имеет все варианты.
Вы можете включить их как:
puts /^a$/mix
# =>(?mix:^a$)
Учитывая -
это синтаксис для флагов. Те, что перед приборной панелью, включены, а те, что после, выключены.
Как объяснено в документах Regexp, это встроенный модификатор, использующий (?on-off)
синтаксис:
Конечный разделитель для регулярного выражения может сопровождаться одним или несколькими однобуквенными параметрами, которые контролируют соответствие шаблона.
/pat/i
- Игнорировать дело/pat/m
- Относитесь к новой строке как к персонажу.
/pat/x
- игнорировать пробелы и комментарии в шаблоне/pat/o
- выполнить#{}
интерполяция только один раз
i
,m,
а такжеx
может также применяться на уровне подвыражения с помощью(?on-off)
Конструкция, которая включает опции и отключает опции для выражения, заключенного в скобки.
Следовательно, в моем случае это означает, что варианты m
, i
, а также x
выключены и никто не включен.