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