Scala如何使用正则表达式?代码实例

2021年3月18日15:13:50 发表评论 799 次浏览

正则表达式解释了一种用于匹配一系列输入数据的通用模式,因此它对许多编程语言中的模式匹配很有帮助。在Scala中,正则表达式通常被称为Scala Regex。

Regex是从scala.util.matching包中导入的类。正则表达式,它广泛应用于搜索和文本解析。为了将字符串转换为正则表达式,我们需要使用r()方法来处理指定的字符串。

例子

// Scala program for Regular 
// Expressions
  
// Creating object
object GfG 
{
  
     // Main method
     def main(args : Array[String]) 
     {
      
         // Applying r() method
         val portal = "lsbin" .r
         val CS = "lsbin is a CS portal."
  
         // Displays the first match
         println(portal findFirstIn CS)
     }
}

输出如下:

Some(lsbin)

在这里, 我们已经调用了方法r()在陈述的字符串上获取一个实例正则表达式类, 以创建模式。方法findFirstIn()在上面的代码中使用来查找正则表达式的第一个匹配项。为了找到表达式中所有匹配的单词, 请使用findAllIn()方法。

范例:

// Scala program for Regular 
// Expressions
import scala.util.matching.Regex
  
// Creating object
object GfG 
{
  
     // Main method
     def main(args : Array[String]) 
     {
      
         // Applying Regex class
         val x = new Regex( "Nidhi" )
         val myself = "My name is Nidhi Singh."
  
         // replaces first match with the
         // String given below
         println(x replaceFirstIn(myself, "Rahul" ))
     }
}

输出如下:

My name is Rahul Singh.

我们甚至可以使用Regex的构造函数代替r()方法。这里, replaceFirstIn()方法用于替换指定字符串的第一个匹配项, 我们甚至可以使用替换所有匹配项replaceAllIn()方法。

范例:

// Scala program for Regular 
// Expressions
import scala.util.matching.Regex
  
// Creating object
object GfG 
{
  
     // Main method
     def main(args : Array[String]) 
     {
      
         // Applying Regex class
         val Geeks = new Regex( "(G|g)fG" )
         val y = "GfG is a CS portal. I like gfG"
  
         // Displays all the matches separated
         // by a separator
         println((Geeks findAllIn y).mkString( ", " ))
     }
}

输出如下:

GfG, gfG

在这里, 我们使用了mkString连接所有匹配项的方法, 用分隔符和管道分隔(|)在上面的代码中用于在给定的字符串中搜索大写和小写。因此, 此处返回指定字符串的大写和小写字母。

Scala正则表达式的语法

Java从Perl继承了一些功能, Scala从Java继承了Scala regex的语法。以下是元字符语法的列表:

子表达式 匹配
^ 它用于匹配行的起点。
$ 用于匹配行的终点。
. 它用于匹配除换行符以外的任何一个字符。
[…] 它用于匹配方括号内的任何一个字符。
[^…] 它用于匹配不在括号中的任何一个字符。
\\A 它用于匹配完整字符串的起点。
\\z 它用于匹配完整字符串的终止点。
\\Z 它用于匹配除新行(如果存在)之外的整个字符串的结尾。
re* 它用于匹配前述表达式的零个或多个外观。
re+ 它用于匹配一个或多个上述表达式。
re? 它用于匹配前述表达式的零个或一个外观。
re{n} 它用于精确匹配上述表达式的n个外观。
re{n, } 它用于匹配上述表达式的n个或更多个外观。
re{n, m} 它用于匹配前述表达式的至少n个和最多m个外观。
q|r 它用于匹配q或r。
(re) 它用于对正则表达式进行分组并重新收集匹配的文本。
(?:re) 它还会对正则表达式进行分组, 但不会重新收集匹配的文本。
(?>re) 它用于在没有回溯的情况下匹配自力更生的模式。
\\w 它用于匹配单词的字符。
\\W 它用于匹配非单词的字符。
\\s 它用于匹配类似于[\ t \ n \ r \ f]的空格。
\\S 它用于匹配非空格。
\\d 它用于匹配数字, 即[0-9]。
\\D 它用于匹配非数字。
\\G 它用于匹配最末端匹配结束的点。
\\n 用于向后引用以占用组号n。
\\b 当它在方括号中时, 它用于匹配单词frontiers, 而在方括号中时, 它用于匹配退格键。
\\B 它用于匹配非单词边界。
\\n, \\t等 它用于匹配换行符, 制表符等。
\\Q 它用于转义(引用)每个字符, 直到\\E。
\\E 它用在以\\Q开头的结尾引用中。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: