Что такое '?-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 выключены и никто не включен.

Другие вопросы по тегам