Scala正则表达式示例

时间:2020-02-23 14:41:48  来源:igfitidea点击:

正则表达式是大多数编程语言中都可以找到的模式匹配实用程序。
它们定义了通用模式来匹配一系列输入字符。
正则表达式广泛用于文本解析和搜索。

scala中的Regex类可在scala.util.matching包中找到。

考虑下面如何查找单词的示例。

import scala.util.matching.Regex

object findWord {
 def main(args: Array[String]) {
	val p = "Functional".r
	val st = "Scala is a Functional Programming Language"
 	 
	println(p findFirstIn st)
 }
}

下图显示了执行此对象main方法时产生的输出。

在上面的示例中,我们找到了"Functional"一词。
我们调用r()方法,该方法将字符串转换为RichString并调用Regex实例。
" findFirstIn"方法查找模式的首次出现。
要查找所有出现的事件,请使用finadAllIn()方法。

如果存在匹配项,scala将返回一个对象。
为了返回实际的字符串,我们使用mkString

mkString方法将结果集连接起来。
竖线(|)符号可用于指定OR搜索条件。
例如,单词" Scala"中字母" S"的小写大写字母。
代替使用r()构造函数,可以使用Regex构造函数。

考虑一个使用正则表达式构造函数的示例;

import scala.util.matching.Regex

object multipleoccurence {
 def main(args: Array[String]) {
    val p = new Regex("(S|s)tudent")
    val st = "Student Id is unique. Students are interested in learning new things"
    
    println((p findAllIn st).mkString(","))
 }
}

以上主要方法将产生输出为;

Student,Student

" replaceFirstIn()"可用于替换匹配单词的第一个匹配项,而" replaceAllIn()"可替换所有匹配的单词。

考虑下面的示例。

object Replace {
 def main(args: Array[String]) {
	val p = "Car".r
	val st = "Car has power windows"
 	 
	println(p replaceFirstIn(st, "Alto"))
 }
}

输出:

Alto has power windows

此处,使用replaceFirstIn方法将汽车一词替换为Alto。

形成正则表达式

Scala支持以下正则表达式运算符。


–匹配除换行符以外的任何单个字符

$–匹配行尾

^ –匹配行首

[…] –匹配方括号中的任何单个字符

[^…] –匹配除括号中的字符以外的任何单个字符

\ A –匹配以A开头的字符串

re * –匹配0个或者多个出现的前一个表达式

re + –匹配上一项或者多项

回覆? –匹配前面的表达式的0或者1

re {n} –精确匹配前一个表达式的n次出现

re {n,} –匹配n次或者多次出现的前一个表达式

re {n,m} –至少匹配n个,最多匹配m个前面的表达式

x | y –匹配x或者y

(重新)–将正则表达式分组并记住匹配的文本

(?:re)–对正则表达式进行分组而不记住匹配的文本

(?> re)–匹配独立模式而不回溯

\ w –匹配单词字符

\ W –匹配非单词字符

\ s –匹配空格。
等效于[\ t \ n \ r \ f]

\ S –匹配非空格

\ d –匹配数字。
相当于[0-9]

\ D –匹配非数字。

\ A –匹配字符串的开头

\ Z –匹配字符串的结尾。
如果存在换行符,则匹配换行符

\ z –匹配字符串的结尾

\ G –上一次比赛结束的比赛点

\ n –向后引用捕获组号" n"

\ b –在方括号外时匹配单词边界

\ B-匹配非单词边界

\ n,\ t等-匹配换行符,回车符,制表符等。

\ Q –转义(引用)所有字符,直到\ E

\ E –以\ Q开头的结尾报价

考虑一个与语句中所有出现的模式匹配的示例。

import scala.util.matching.Regex

object findAll {
 def main(args: Array[String]) {
	val p = new Regex("al+")
	val st = "Scala is a Functional programming language"
 	 
	println((p findAllIn st).mkString(","))
 }
}

输出:

al,al