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