メモ帳

やったこととかちまちまと書く 需要のない記事を生成している

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;
}
参考

qiita.com

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の違いについて

codezine.jp

Scala

val s = "Scalaで正規表現"
val r = "正規表現".r

if(r.findFirstIn(s).nonEmpty)
    println("Match: " + s)
else 
    println("No Match: " + s)

Groovy

def str = "Groovyで正規表現"
if(str =~ "正規表現") {
    println str
}
参考

正規表現

Kotlin

fun main(arge: Array<String>) {
    val str = "Kotlinで正規表現"
    val regex = Regex("正規表現")
    if(regex.containsMatchIn(str))
        println("Match: " + str)
    else 
        println("No Match: " + str)
}
参考

qiita.com

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:本当はしっかりパターンを記述するべきだろうけど・・・