我经常忘记正则表达式修饰符m
和s
以及它们的区别。记住它们的好方法是什么?
据我了解,它们是:
'm' is for multiline, so that
^
and$
will match beginning of string and end of string multiple times. (as divided by\n
)'s' is so that the dot will match even the newline character
通常,我只是使用
/some_pattern/ism
但最好相应地使用它们(在我的情况下通常是“s”)。
你认为什么是记住它们而不是每次都忘记哪个的好方法?
最佳答案
使用正则表达式多年但仍然不了解这两个修饰符如何工作的人并不罕见。正如您所观察到的,名称“多行”和“单行”并不是很有帮助。它们听起来好像必须是相互排斥的,但实际上它们是完全独立的。我建议您忽略这些名称并专注于它们的作用:m
更改 anchor 的行为(^
和 $
),并且 s
更改点 (.
) 的行为。
Ruby 的作者是一位混淆了这些模式的杰出人物。他基于 Perl 创建了自己的正则表达式实现,但他决定让 ^
和 $
始终为行 anchor ——也就是说,多行模式始终处于打开状态。不幸的是,他还错误地将点匹配一切模式命名为多行。因此,Ruby 没有 s
修饰符,但它的 m
修饰符可以实现 s
在其他风格中的作用。
至于总是使用/ism
,我建议不要这样做。正如您所发现的,它基本上是无害的,但它向任何试图弄清楚正则表达式应该做什么的其他人(甚至将来的您自己)发送了一条令人困惑的信息。
关于regex - 正则表达式修饰符(或标志) 'm' 和 's' 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/918806/