首页 > 其他分享 >无涯教程-Scala - 正则表达式

无涯教程-Scala - 正则表达式

时间:2024-01-26 16:31:46浏览次数:30  
标签:匹配 val scala 正则表达式 Demo Scala 无涯 pattern

本章介绍Scala如何通过scala.util.matching包中提供的 Regex 类支持正则表达式。

尝试下面的示例程序,我们将尝试从语句中找出单词 Scala 。

import scala.util.matching.Regex

object Demo {
   def main(args: Array[String]) {
      val pattern="Scala".r
      val str="Scala is Scalable and cool"
      
      println(pattern findFirstIn str)
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo
Some(Scala)

我们创建一个String并在其上调用 r()方法, Scala隐式地将String转换为RichString并调用该方法以获取Regex的。

您可以使用mkString()方法来连接输出列表,并且可以1使用管道(|)搜索Scala的小写大写字母,也可以使用 Regex 构造函数或 r()方法来创建模式。

import scala.util.matching.Regex111
   def main(args: Array[String]) {
      val pattern=new Regex("(S|s)cala")
      val str="Scala is scalable and cool"
      
      println((pattern findAllIn str).mkString(","))
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo
Scala,scala

如果您想替换匹配的文本,可以使用 replaceFirstIn()替换第一个匹配项,或者使用 replaceAllIn()替换所有匹配项。

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

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo
Java is scalable and cool

正则表达式

Example 描述
. 匹配换行符以外的任何字符
[Rr]uby 匹配“ Ruby”或“ ruby​​”
rub[ye] 匹配“ ruby​​”或“ rube”
[aeiou] 匹配任何一个小写的元音
[0-9] 匹配任意数字;与[0123456789]相同
[a-z] 匹配任何小写ASCII字母
[A-Z] 匹配任何大写ASCII字母
[a-zA-Z0-9] 符合以上任何条件
[^aeiou] 匹配小写的元音
[^0-9] 匹配数字以外的任何东西
\\d 匹配数字:[0-9]
\\D 匹配一个非数字:[^ 0-9]
\\s 匹配空格字符:[\ t\ r\ n\ f]
\\S 匹配非空格:[^\ t\ r\ n\ f]
\\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位数字
([Rr]uby(, )?)+ 匹配"Ruby", "Ruby, ruby, ruby"

注意-每个反斜杠在上面的字符串中出现两次,这是因为在Java和Scala中,单个反斜杠是字符串文字中的转义字符,而不是出现在字符串中的常规字符。因此,您需要编写"\\"来代替字符串中的单个反斜杠,而不是"\"。

正则表达式示例

import scala.util.matching.Regex

object Demo {
   def main(args: Array[String]) {
      val pattern=new Regex("abl[ae]\\d+")
      val str="ablaw is able1 and cool"
      
      println((pattern findAllIn str).mkString(","))
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo
able1

参考链接

https://www.learnfk.com/scala/scala-regular-expressions.html

标签:匹配,val,scala,正则表达式,Demo,Scala,无涯,pattern
From: https://blog.51cto.com/u_14033984/9435101

相关文章

  • 无涯教程-Scala - 模式匹配
    在函数值和闭包之后,模式匹配是Scala第二广泛使用的函数,Scala在处理消息时为模式匹配提供了强大的支持。Pattern-示例objectDemo{defmain(args:Array[String]){println(matchTest(3))}defmatchTest(x:Int):String=xmatch{case1=>......
  • 无涯教程-Scala - 特性(Traits)
    Traits封装了方法和字段定义,然后可以通过混合到类中来重用它们。与类继承不同,一个类可以混合任意数量的traits。traits定义看起来类似于类定义,只是它使用关键字trait。以下是trait的基本示例语法。Traits-语法traitEqual{defisEqual(x:Any):BooleandefisNot......
  • 无涯教程-Scala - 数组(Arrays)
    Scala提供了一种数据结构数组,它存储了相同类型元素的固定大小的顺序集合。声明数组要在程序中使用数组,必须声明一个变量以引用该数组,并且必须指定该变量可以引用的数组的类型。varz:Array[String]=newArray[String](3)orvarz=newArray[String](3)在此,z被声明为可容......
  • 无涯教程-Scala - 闭包
    closure闭包是一个函数,其返回值取决于在此函数外部声明的一个或多个变量的值。以下带有匿名函数的代码。valmultiplier=(i:Int)=>i*10这里,函数体中使用的唯一变量i*10是i,它被定义为函数的参数,尝试以下代码-valmultiplier=(i:Int)=>i*factor乘数中有两个自由变......
  • javascript replaceall 正则表达式
    varstr="dogdogdog";varstr2=str.replace(/dog/g,"cat");console.log(str2);参考:https://www.jb51.net/article/23762.htm?tdsourcetag=s_pcqq_aiomsgstr="dogdogdog12";str=str.replace(newRegExp("[d]","g......
  • 无涯教程-Scala - 函数声明
    函数是执行任务的一组语句,您可以将代码分成单独的函数,从逻辑上讲,划分通常是使每个函数执行特定任务。函数声明Scala函数声明具有以下形式-deffunctionName([listofparameters]):[returntype]如果您不使用等号和方法主体,则方法被隐式声明为抽象。函数定义Scala函数定......
  • 无涯教程-Scala - 环境设置
    Scala可以安装在任何基于UNIX或Windows的系统上,在机器上开始安装Scala之前,必须在计算机上安装Java1.8或更高版本。请按照下面给出的步骤安装Scala。步骤1-验证Java安装首先,您需要在系统上安装Java软件开发套件(SDK)。要验证这一点,请根据所使用的平台执行以下两个命令中的任......
  • 无涯教程-Rust - 并发(Concurrency)
    在并发编程中,程序的不同部分独立执行,另一方面,在并行编程中,程序的不同部分会同时执行。线程数我们可以使用线程同时运行代码,在当前的操作系统中,已执行程序的代码在一个进程中运行,并且操作系统一次管理多个进程,在您的程序中,您还可以具有可以同时运行的独立部分,运行这些独立部分的......
  • 无涯教程-Rust - 智能指针
    Rust默认情况下在堆栈上分配所有内容,您可以通过将它们包装在智能指针(如Box)中来将它们存储在堆上,智能指针实现下表中列出的特征-Sr.NoTraitnamePackage&描述1Derefstd::ops::Deref用于不可变的取消引用操作,如*v。2Dropstd::ops::Drop当值超出范围时用于......
  • 无涯教程-Rust - 迭代&闭包
    在本章中,我们将学习RUST中的迭代器和闭包如何工作。Iterator迭代器迭代器有助于迭代值的集合,例如数组,向量,Map映射等,迭代器实现Rust标准库中定义的Iteratortrait,iter()方法返回集合的迭代器对象,迭代器对象中的值称为元素,迭代器的next()方法可用于遍历元素,当到达集合末尾时,next......