“[]”で囲われた文字列だけ抜き出したいな〜という処理があったので、Scalaで書いてみました。この手のってたぶんPerlとかRubyとかで書くのが王道なんでしょうけど、あいにく私はPerlもRubyもどっちも好きじゃ無いんですよ。
やりたいことの例としては、
[xxx][yyy]…………
と言った文字列の時に、「xxx」、「yyy」だけ抜き出したいと言うことですねっ。
1 2 3 4 5 6 7 8 9 |
import util.parsing.combinator._ object Main extends RegexParsers { def parse(str:String) = parseAll(rep("[" ~> "[^\\[\\]]+".r <~ "][^\\[\\]]*".r) ,str).get def main(args: Array[String]) = { println(parse("[グルメ]aa[ラーメン]喜多方ラーメン試食しました")) } } |
実質的には1行で済んでますね。Javaだとこうはいかないでしょう。これでもScalaのパーサーコンピネーター、使っております。
パースの結果はリストで得られております。
1 2 |
$ scala Main.scala List(グルメ, ラーメン) |
どうすか、Scala使ってみたくなりましたん?
最近のコメント