ScalaとJavaの正規表現で、ドット(.)を改行にマッチさせる

そもそもScalaで、大文字小文字の区別しないとかどうやるんだ…と疑問に思っていたんですが。

val adSection = """<!--\s*google_ad_section_start\s*-->((?s).*?)<!--\s*google_ad_section_end\s*-->""".r

Regex、すなわち正規表現はscala.util.matchingパッケージで導入されており(scala.util.regexpパッケージは文字列以外のオブジェクトへも正規表現マッチングを可能とするもので、一般で言うところの正規表現に相当するのは対文字列限定なこちらutil.matchingの方)、これはjava.util.regexパッケージを利用しているので、使える正規表現等はそれに準じる。すなわち、マッチフラグは「(?フラグ名)」で正規表現に埋め込むことができ、フラグ名「i」は大小文字区別無し、「d」はUnix行(「.」「^」「$」は「\n」のみを行末文字と見なす)、「m」は複数行(「^」と「$」は行末文字でも機能する)、「s」はドットオール(「.」は行末文字も含む)、「u」はUnicodeで大小文字区別無し、「x」は空白と「#」以降は無視する。また、置き換え文字列では正規表現自身と異なり「\」では無く「$」がグループ(「$0」はマッチ全体)を導出し、「\」は「\$」の場合のみ意味(「$」文字自体ということ)を持つ。

Scala6階:型

Scala開眼さっそくお世話になった。読まないとあかん。