Scala 正则表达式

Scala 通过 scala.util.matching 包中的 Regex 类来支持正则表达式。以下实例演示了使用正则表达式查找单词 Scala :

import scala.util.matching.Regexobject Test {def main(args: Array[String]) {val pattern = "Scala".rval str = "Scala is Scalable and cool"println(pattern findFirstIn str)}
}

执行以上代码,输出结果为:

$ scalac Test.scala
$ scala Test
Some(Scala)

实例中使用 String 类的 r() 方法构造了一个Regex对象。

然后使用 findFirstIn 方法找到首个匹配项。

如果需要查看所有的匹配项可以使用 findAllIn 方法。

你可以使用 mkString( ) 方法来连接正则表达式匹配结果的字符串,并可以使用管道(|)来设置不同的模式:

import scala.util.matching.Regexobject Test {def main(args: Array[String]) {val pattern = new Regex("(S|s)cala")  // 首字母可以是大写 S 或小写 sval str = "Scala is scalable and cool"println((pattern findAllIn str).mkString(","))   // 使用逗号 , 连接返回结果}
}

执行以上代码,输出结果为:

$ scalac Test.scala
$ scala Test
Scala,scala

如果你需要将匹配的文本替换为指定的关键词,可以使用 replaceFirstIn( ) 方法来替换第一个匹配项,使用 replaceAllIn( ) 方法替换所有匹配项,实例如下:

object Test {def main(args: Array[String]) {val pattern = "(S|s)cala".rval str = "Scala is scalable and cool"println(pattern replaceFirstIn(str, "Java"))}
}

执行以上代码,输出结果为:

$ scalac Test.scala
$ scala Test
Java is scalable and cool

正则表达式

Scala 的正则表达式继承了 Java 的语法规则,Java 则大部分使用了 Perl 语言的规则。

下表我们给出了常用的一些正则表达式规则:

表达式匹配规则^匹配输入字符串开始的位置。$匹配输入字符串结尾的位置。.匹配除"rn"之外的任何单个字符。[...]字符集。匹配包含的任一字符。例如,"[abc]"匹配"plain"中的"a"。[^...]反向字符集。匹配未包含的任何字符。例如,"[^abc]"匹配"plain"中"p","l","i","n"。A匹配输入字符串开始的位置(无多行支持)z字符串结尾(类似$,但不受处理多行选项的影响)Z字符串结尾或行尾(不受处理多行选项的影响)re*重复零次或更多次re+重复一次或更多次re?重复零次或一次re{ n}重复n次re{ n,}re{ n, m}重复n到m次a|b匹配 a 或者 b(re)匹配 re,并捕获文本到自动命名的组里(?: re)匹配 re,不捕获匹配的文本,也不给此分组分配组号(?> re)贪婪子表达式w匹配字母或数字或下划线或汉字W匹配任意不是字母,数字,下划线,汉字的字符s匹配任意的空白符,相等于 [tnrf]S匹配任意不是空白符的字符d匹配数字,类似 [0-9]D匹配任意非数字的字符G当前搜索的开头n换行符b通常是单词分界位置,但如果在字符类里使用代表退格B匹配不是单词开头或结束的位置t制表符Q开始引号:Q(a+b)*3E可匹配文本 "(a+b)*3"。E结束引号:Q(a+b)*3E可匹配文本 "(a+b)*3"。

正则表达式实例

实例描述.匹配除"rn"之外的任何单个字符。[Rr]uby匹配 "Ruby" 或 "ruby"rub[ye]匹配 "ruby" 或 "rube"[aeiou]匹配小写字母 :aeiou[0-9]匹配任何数字,类似 [0123456789][a-z]匹配任何 ASCII 小写字母[A-Z]匹配任何 ASCII 大写字母[a-zA-Z0-9]匹配数字,大小写字母[^aeiou]匹配除了 aeiou 其他字符[^0-9]匹配除了数字的其他字符d匹配数字,类似: [0-9]D匹配非数字,类似: [^0-9]s匹配空格,类似: [ trnf]S匹配非空格,类似: [^ trnf]w匹配字母,数字,下划线,类似: [A-Za-z0-9_]W匹配非字母,数字,下划线,类似: [^A-Za-z0-9_]ruby?匹配 "rub" 或 "ruby": y 是可选的ruby*匹配 "rub" 加上 0 个或多个的 y。ruby+匹配 "rub" 加上 1 个或多个的 y。d{3}刚好匹配 3 个数字。d{3,}匹配 3 个或多个数字。d{3,5}匹配 3 个、4 个或 5 个数字。Dd+无分组: + 重复 d(Dd)+/分组: + 重复 Dd 对([Rr]uby(, )?)+匹配 "Ruby"、"Ruby, ruby, ruby",等等

注意上表中的每个字符使用了两个反斜线。这是因为在 Java 和 Scala 中字符串中的反斜线是转义字符。所以如果你要输出 ..,你需要在字符串中写成 .. 来获取一个反斜线。查看以下实例:

import scala.util.matching.Regexobject Test {def main(args: Array[String]) {val pattern = new Regex("abl[ae]d+")val str = "ablaw is able1 and cool"println((pattern findAllIn str).mkString(","))}
}

执行以上代码,输出结果为:

$ scalac Test.scala
$ scala Test
able1

java正则匹配英文句号_Scala 正则表达式 0411相关推荐

  1. java正则匹配英文句号_java正则表达式最简单 学习教程

    本大教程以一个验证手机号的表达式为例,学完本例后,基本上所有的表达式都能看懂了,但是如果想要达到上手就能写的程度,还需要多练习多测试 呀! 来看 这样一个代码 String mobilePhoneRe ...

  2. java正则匹配英文句号_「正则表达式」王国奇遇记

    第一回 初来乍到 NPC: "欢迎来到正则表达式的国度,勇士!这里的每一个人都使用正则表达式,我是这里的 NPC,每一个来到这里的人都将由我代为介绍正则世界的规则,至于能领悟到何种境界,就看 ...

  3. java正则匹配英文句号_谈谈正则表达式中的句号.

    我们知道,正则表达式中,可以用 . 表示任意单个字符,但在underscore和jquery的源代码中,我们可以看到,这些著名类库的代码中,经常并不是用 . 来表示任意字符,而是使用 [\w\W] 或 ...

  4. java正则匹配双字节_Java 正则表达式详解(二)

    Java常用正则表达式匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用 ...

  5. java正则匹配下划线_正则表达式(匹配英文、中文、数字、下划线)

    如下的正则: 复制代码 代码示例: ^[\w\u4E00-\u9FA5\uF900-\uFA2D]*$ 1.一个正则表达式,只含有汉字.数字.字母.下划线不能以下划线开头和结尾: ^(?!_)(?!. ...

  6. java/scala正则匹配英文句号

    object ScalaTest {def main(args: Array[String]): Unit = {println("ABC...".replaceAll(" ...

  7. java正则匹配的坑_java正则表达式入坑指南

    在日常开发工作中,无论你使用的语言是java.python.shell.golang还是C#, 正则表达式是编程语言中几乎绕不开的话题.有了它,可以帮你快速定位到符合条件的文本内容.今天小编带大家一起 ...

  8. java正则匹配下划线_java正则表达式-匹配中文数字字母下划线

    正则表达式用来指定字符串模式.当你需要定位匹配某种模式的字符串时就可以使用正则表达式.例如,我们下面的一个例程就是在一个HTML文件中通过查找字符串模式来定位所有的超链接.     当然,为了指定一种 ...

  9. java正则匹配下划线_js正则表达式匹配数字字母下划线等

    1.一个正则表达式,只含有汉字.数字.字母.下划线不能以下划线开头和结尾: ^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$ 其中: ^ 与字符串开始的地方匹配 ( ...

最新文章

  1. Iptables防火墙详细介绍与实战增强服务器安全
  2. Oracle查看锁表
  3. mysql 触发器 本表_MySQL触发器处理本表数据
  4. 如何在UE4中创建线程
  5. 网站能拿到其他网站的cookie_在网站推广中企业网站能发挥哪些作用?(一)
  6. IP地址与子网掩码基础
  7. python编程 迷你世界_迷你编程电脑版|迷你世界迷你编程下载 v1.0官方版 - 绿点软件站...
  8. 20190917:(leetcode习题)将有序数组转换为二叉搜索树
  9. 王者荣耀游戏服务器架构的演进读后感
  10. 成都理工大学乐千桤java考试,成都理工大学方案.PDF
  11. 大数据笔记--Spark机器学习(第二篇)
  12. Android 10 低内存应用白名单和应用保活
  13. 谷歌 发布android 8,2017谷歌大会正式发布Android 8.0!
  14. Java使用Lambda表达式多字段求和
  15. 使用最新TexLive2020+VsCode来编写Latex论文(假设使用:CVPR2018)
  16. 招募爱心家庭为藏区孤儿圆梦
  17. 2019xupt-acm校赛 题解(C.给你一个666)by出题组tongtong
  18. Docker(9) 安装Oracle18c
  19. 俩种方式找出Excel中相同和不同的数据
  20. 输入三个数按从小到大顺序输出_攀枝花数显型耐压测试仪公司,期待合作

热门文章

  1. 领域情报搜索实践:真实场景下的问答实施策略与风险分析
  2. 德勤发布《 2020 亚太四大半导体市场的崛起》报告,美国收入占比达到47%,中国大陆仅占 5%
  3. 分布式系统:SrpingBoot整合Zookeeper和Dubbo的版本匹配问题
  4. 【Linux】使用ZStack私有云创建本地Linux服务器
  5. Shell awk文本处理,shell脚本编写
  6. MyEclipse配置Tomcat 6
  7. UVAL - 6755 - Swyper Keyboard
  8. 获得SD卡的剩余容量
  9. 第十届蓝桥杯 等差数列(Python)
  10. html中如何让字段闪烁,Javascript结合CSS实现边框闪烁提示