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