N.1 匹配的基本用法
表达式 | 匹配规则 |
^ | 匹配输入字符串开始的位置。 |
$ | 匹配输入字符串结尾的位置。 |
. | 匹配除"\r\n"之外的任何单个字符。 |
[...] | 字符集。匹配包含的任一字符。 |
[^...] | 反向字符集。匹配未包含的任何字符。 |
test* | 重复前面字符零次或更多次 |
test+ | 重复前面字符一次或更多次 |
test? | 重复前面字符零次或一次 |
package tmp import scala.util.matching.Regex object Test { def main(args: Array[String]): Unit = { main1 } // findFirstIn 和findAllIn 用法 ( str.matches()也可以用哪个 但是 测试发现 好像有时候有效 有时候无效,但matches匹配是返回booble类型的 def main1() { val pattern1 = "(S|s)cala".r // 用.r 创建表达式 val pattern2 = new Regex("(S|s)cala") // 或用用Regex创建表达式 val str = "Scala1 is Scalable and cool Scala" println((pattern1 findAllIn str).mkString(",")) // 使用逗号 , 连接返回结果 //运行结果Scala,Scala } // replaceFirstIn或str.replaceFirst方法来替换第一个匹配项。 replaceAllIn或str.replaceAll 替换是替换所有 def main2() { val pattern = "(S|s)cala".r val str = "Scala is scalable and cool" println(pattern replaceFirstIn(str, "Java")) // 运行结果Java is scalable and cool println(str.replaceFirst("(S|s)cala","Java")) //写法二 } // 正则表达式的语法 def main3() { // 字符集合的匹配 val pattern0 = "sc[b,c,a,d]la".r // 如scala 注意表达式的这里的字母是小写字符串里面的大小写是有区分的 val pattern1 = "sc[bcad]la".r // 和pattern0的作用是一样的 // 非开头匹配 val pattern2 = "sc[^bcad]la".r // 不能是scbla 或 scala 或 scala val pattern3 = "Sc[^A-Za-z]la".r // 不能是A-Z或a-z的字母范围 // 涉及转义符号 val pattern4 = "Sc\\.la".r // 如果字符串里面有点 你可以使用\\. 来转义 val pattern5 = "Sc[\\.]la".r // 可以加中括号也可以不加中括号 val pattern6 = "Sc\\*la".r // 如果字符串里面有* 你可以使用\\* 来转义 // 字符串包括空格的情况 val pattern7 = "huangman tao".r // 字符串里面支持空格 val pattern8 = "yes[\\s]kk".r // \\s 表示‘一’空格键 或 tab键 或一个换行键 val pattern9 = "yes\\skk".r // 可以加中括号 也可以不加中括号 // 控制匹配次数 val pattern10 = "test{3}".r // 相当于"testtt".r 的写法。只能匹配3遍 val pattern11 = "test{3,5}".r // {3,5} 表示 范围 3个或4个或5个 // 匹配无限次 val pattern12 = "yes*".r // s可以有用无数个 val pattern13 = "yes.".r // s可以只能有一个 如yess,yesa,yesb,yes // 匹配情况或的写法 val pattern14 = "yes[a|b|c]".r // yes后面必须要有a 或 b 或c val pattern15 = "yes(a|b|c)".r // 和pattern9的写法是一样的 这个可以用小括号 // 大范围匹配情况 val pattern16 = "max[\\w]*".r // \\w表示数字或字母或下划线(没有包括小数点或汉字) 如 max124as,max1234,max124,maxaava val pattern17 = "max\\w*".r // 可以加中括号也可以不加中括号 val pattern18 = "max[\\w|.]*".r // 上面不包括小数点 我们这里加个小数情况如结果成 如 max124as,max1234,max124,maxaava max124as,max1234.124abc,max124.1,maxaava.254 val str = "Scala is scalable and coolSc*la max124as你f1_41 sac.la Sc.la huangman tao testttt test testtttttttt yessss124 yesa yesb yes kk aAA max1234.124abc max124.1 maxaava.254" println( (pattern16 findAllIn str).mkString(",")) // 运行结果Java is scalable and cool } } |