Что такое '? -mix' в Ruby Regular Expression
Просто пытаюсь отладить регулярное выражение в 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
. Должен ли я быть обеспокоен этим? Откуда он?
Ответы
Ответ 1
mix
не является английским словом mix, его параметры Regexp
.
См. Regexp#to_s
:
Возвращает строку, содержащую регулярное выражение и его параметры (с использованием нотации (?opts:source
).
В вашем примере m
предназначен для многострочного режима, i
для нечувствительности к регистру, а x
- для расширенного режима. Параметры перед тире включены, после них (по умолчанию). На примере вопроса ?-mix
отключены все опции.
Вы можете включить их, например:
puts /^a$/mix
# =>(?mix:^a$)
Ответ 2
Относительно -
это синтаксис для флагов. Те, кто находится перед тире, включены, а те, кто выключен,
Как указано в документах Regexp, это встроенный модификатор, используя синтаксис (?on-off)
:
Конечный разделитель для регулярного выражения может сопровождаться одним или несколькими однобуквенными опциями, которые определяют соответствие шаблона.
-
/pat/i
- Игнорировать случай
-
/pat/m
- обрабатывать символ новой строки как символ, сопоставляемый .
-
/pat/x
- игнорировать пробелы и комментарии в шаблоне
-
/pat/o
- Выполните интерполяцию #{}
только один раз
i
, m,
и x
также могут применяться на уровне подвыражения с конструкцией (?on-off)
, которая включает опции и отключает опции для выражения, заключенного в круглые скобки.
Следовательно, в моем случае это означает, что опции m
, i
и x
выключены и ни одна из них не включена.