天天看點

java 與 scala 正規表達式java 與 scala 正規表達式

java 與 scala 正規表達式

本篇文章用于比較java與scala正規表達式的差别

檢查某個字元串是否比對某個正規表達式

java 版本

核心方法 string.matches()

public static void main(String[] args) {
    //正規表達式
    String pattern = "@@\\$\\$##--.*--##\\$\\$@@";
    boolean matches = "@@$$##--abcd--##$$@@".matches(pattern);
    //是否比對
    System.out.println("@@##--abcd--##@@ 是否比對:" + matches);
}
           

scala 版本

object ScalaRegexDemo {

    def main(args: Array[String]) = {
        //構造一個正規表達式
        //因為含有反斜杠,是以使用原始字元串
        var pattern="""@@\$\$##--.*--##\$\$@@"""
        var matches= "@@$$##--abcd--##$$@@".matches(pattern)
        println(s"matches:$matches")
    }
}
           

使用scala檢測字元串是否比對,方式與java類似。

擷取比對到的字元串

假如我們想擷取到

@@$$##--abcd--##$$@@

中的abcd,當含有多個比對到的字元串時候,把比對到的字元串都列印出來。

比如:

@@$$##--ab--##$$@@ zfewurehewui @@$$##--cd--##$$@@ @@$$##--ef--##$$@@

列印出ab、cd、ef

public static void main(String[] args) {
    //此處使用非貪婪比對,關于貪婪比對可以看這篇文章
    //http://blog.csdn.net/lxcnn/article/details/4756030
    //我們把要提取的字元串用()括起來
    Pattern pattern = Pattern.compile("@@\\$\\$##--(.*?)--##\\$\\$@@");
    Matcher matcher = pattern.matcher("@@$$##--ab--##$$@@ zfewurehewui  @@$$##--cd--##$$@@  @@$$##--ef--##$$@@");
    while (matcher.find()) {
        System.out.println("比對的完整字元串:" + matcher.group(0));
        System.out.println("内容:" + matcher.group(1));
    }
}
           

object ScalaRegexDemo2 {

    def main(args: Array[String]) = {
        val pattern ="""@@\$\$##--(.*?)--##\$\$@@""".r
        //使用提取器的方式,擷取比對到的字元串
        for (pattern(item) <- pattern.findAllIn("@@$$##--ab--##$$@@ zfewurehewui  @@$$##--cd--##$$@@  @@$$##--ef--##$$@@")) {
            println(s"item: ${item}")
        }
    }
}