JVM言語で正規表現してみた
レポートにC言語以外のプログラミング言語における正規表現の扱い方を調べてC言語と比較せよって項目があったのでJVM言語でやってみた
C言語 (今回実装する機能*1 )
#include <stdio.h> #include <regex.h> int main(int argv, char* args[]) { char str[] = "C言語で正規表現"; char regex[] = "正規表現"; regex_t preg; if (regcomp(&preg,regex, REG_EXTENDED | REG_NEWLINE ) != 0) { printf("Error"); return 1; } if(!(regexec(&preg, str,0,NULL,0) != 0)) { printf("Match: %s\n",str); } else { printf("No Match: %s\n",str); } regfree(&preg); return 0; }
参考
Java
import java.util.regex.Pattern; import java.util.regex.Matcher; class Regex{ public static void main(String args[]){ String str = "Javaで正規表現"; String regex = "正規表現"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); if(m.find()) { System.out.println("Match: " + str); } else { System.out.println("No Match: " + str); } } }
matches,findの違いについて
Scala
val s = "Scalaで正規表現" val r = "正規表現".r if(r.findFirstIn(s).nonEmpty) println("Match: " + s) else println("No Match: " + s)
Kotlin
fun main(arge: Array<String>) { val str = "Kotlinで正規表現" val regex = Regex("正規表現") if(regex.containsMatchIn(str)) println("Match: " + str) else println("No Match: " + str) }
参考
Clojure
(def text "Clojureで正規表現") (print (if (re-find #"正規表現" text) "Match: " "No Match: " ) text "\n") (print (if (re-seq #"正規表現" text) "Match: " "No Match: " ) text "\n")
雑感
Kotlinを除き若い言語ほど正規表現を使うのが手軽になってきていると思った。(小並感)
正規表現は取っ付きづらいイメージがあったけど実際に使ってみるとそうでも無かった。パターンは書くのめんどくさいけど・・・
Groovyの
=~
は初めてみるやり方だったので感心した。Haskellとか他の言語にも実装されているらしいけどね。(正規表現を全く使わないので分からず)
*1:本当はしっかりパターンを記述するべきだろうけど・・・