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

java 版本

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));
    }
}

scala 版本

object ScalaRegexDemo2 {

    def main(args: Array[String]) = {
        val pattern ="""@@\$\$##--(.*?)--##\$\$@@""".r
        //使用提取器的方式,获取匹配到的字符串
        for (pattern(item) <- pattern.findAllIn("@@$$##--ab--##$$@@ zfewurehewui  @@$$##--cd--##$$@@  @@$$##--ef--##$$@@")) {
            println(s"item: ${item}")
        }
    }
}
上一篇:SQL问题:com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value


下一篇:mysql | 查询一个人最新的记录 并对某一字段进行汇总统计