20

m正規表現修飾子とsその違いをよく忘れます。それらを覚える良い方法は何ですか?

私が理解しているように、それらは次のとおりです。

'm' は複数行を表すため、^and$ は文字列の先頭と文字列の末尾に複数回一致します。( で割った値\n)

「s」は、ドットが改行文字にも一致するようにするためです

多くの場合、私はただ使用します

/some_pattern/ism

しかし、それに応じてそれらを使用する方がおそらく良いでしょう(私の場合は通常「s」)。

毎回どれがどれであるかを忘れるのではなく、それらを覚えるにはどうすればよいと思いますか?

4

3 に答える 3

23

これらの2つの修飾子がどのように機能するかをまだ理解していない、正規表現を何年も使用している人を見つけることは珍しいことではありません。お気づきのように、「multiline」と「singleline」という名前はあまり役に立ちません。それらは相互に排他的でなければならないように聞こえますが、完全に独立しています。名前を無視して、その機能に集中することをお勧めします。mアンカー(^および$sの動作を変更し、ドット(.)の動作を変更します。

モードを混同した著名人の1人は、Rubyの作者です。彼はPerlに基づいて独自の正規表現の実装を作成しましたが^$常にラインアンカーを使用することを決定しました。つまり、マルチラインモードは常にオンになっています。残念ながら、彼はまた、dot-matches-everythingモードのマルチラインという名前を誤って付けました。したがって、Rubyにはs修飾子はありませんが、そのm修飾子はs他のフレーバーで行うことを行います。

いつも使う/ismのはやめましょう。あなたが発見したように、それはほとんど無害ですが、正規表現が何をすべきかを理解しようとしている他の人に(または将来的には自分自身にさえ)紛らわしいメッセージを送信します。

于 2009-05-28T03:29:45.167 に答える