scala和正则表达式常用基础知识示例

http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html

.     匹配除换行符以外的任意字符
\w     匹配字母或数字或下划线或汉字
\s     匹配任意的空白符
\d     匹配数字
\b     匹配单词的开始或结束
^     匹配字符串的开始
$     匹配字符串的结束
在[]里面不需要转义,在外面,如().?之类的字符是需要转义的.
后向引用示例:
\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。
正则表达式需求:
示例:there are 3 threads hung three minutes lasted.
获取:3
表5.懒惰限定符 代码/语法    说明
*?     重复任意次,但尽可能少重复
+?     重复1次或更多次,但尽可能少重复
??     重复0次或1次,但尽可能少重复
{n,m}?     重复n到m次,但尽可能少重复
{n,}?     重复n次以上,但尽可能少重复
a.*?b匹配最短的,以a开始,以b结束的字符串

表4.常用分组语法 分类    代码/语法    说明
捕获     (exp)        匹配exp,并捕获文本到自动命名的组里
(?<name>exp)     匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)               匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言 (?=exp)  匹配exp前面的位置
(?<=exp)            匹配exp后面的位置
(?!exp)               匹配后面跟的不是exp的位置
(?<!exp)             匹配前面不是exp的位置
\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。
(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。

val regex = """\b\d+(?=\s+(threads|thread)\b)""".r
println(regex.findFirstIn("there are 23 threads in workers, please check"))
println(regex.findFirstIn("there are 1 thread in workers, please check"))
val regex2 = """\b\w+(?=ing\b)""".r
regex2.findAllIn("I'm singing while you're dancing").foreach { println }

 

posted on 2017-05-20 07:31  tneduts  阅读(689)  评论(0编辑  收藏  举报

导航