Нередко можно встретить человека, который годами использует регулярные выражения, который до сих пор не понимает, как работают эти два модификатора. Как вы заметили, названия «многострочный» и «однострочный» не очень полезны. Они звучат так, как будто они должны быть взаимоисключающими, но они полностью независимы. Я предлагаю вам игнорировать имена и сосредоточиться на том, что они делают: m
меняет поведение якорей (^
и $
), а s
меняет поведение точки (.
).
Один выдающийся человек, который перепутал моды, является автором Ruby. Он создал свою собственную реализацию регулярных выражений, основанную на Perl, за исключением того, что он решил, что ^
и $
всегда будут якорями строки, то есть многострочный режим всегда включен. К сожалению, он также неправильно назвал режим точка-совпадения-все multiline . Таким образом, в Ruby нет модификатора s
, но его модификатор m
делает то же, что и s
в других вариантах.
Что касается всегда использования /ism
, я рекомендую против этого. Как вы уже обнаружили, он в основном безвреден, но он посылает сбивающее с толку сообщение любому, кто пытается выяснить, что регулярное выражение должно было сделать (или даже себе, в будущем).