scale 正则表达式

0 阅读4分钟

(一)正则表达式的定义

正则表达式(Regular Expression)是一种用于匹配、查找和替换文本中特定模式的字符串。

  • 查找:从大字符串里揪出符合规则的子串(比如从一段文字里找手机号)
  • 匹配:验证整个字符串是否符合规则(比如检查输入的是不是合法手机号)

(二) 基本组成部分

无论多么复杂的正则表达式,都是由如下4个部分组成

1.字符类。包括单个字符和字符范围。例如,a匹配字符a[abc]匹配ab或者c中的任意一个字符,[a-z]匹配从az的任意一个小写字母。

2.量词。用于指定前面的字符或字符组出现的次数。例如,*表示前面的字符可以出现0次或多次,+表示前面的字符至少出现1次,?表示前面的字符最多出现1次。如a*可以匹配空字符串、aaaaaa等;a+可以匹配aaaaaa等,但不能匹配空字符串;a?可以匹配空字符串或者a

3.锚点。用于指定匹配的位置。例如,^表示匹配行首,$表示匹配行尾。^abc表示匹配以abc开头的行,abc$表示匹配以abc结尾的行。

4.分组。使用括号()来分组。例如,(ab)+表示ab这个组合至少出现1次,如abababababab等符合要求。分组还可以用于提取匹配的子字符串等操作。

(三)常见规则

image.png

package Array

/**
 * 1. 处理字符串
 * 2. 查找:在一个大的字符串中,寻找是否有满足规则(条件)的子串
 * 3. 匹配、校验:判断指定的字符串是否满足某些规则(条件)
 * 这里的规则(条件)就是采用正则表达式写的特殊的字符串
 * !!!!!!!!正则表达式与具体的编程语言无关!!!!!!!!
 * 是一个独立、通用的计算机技术
 *
 *
 */
object array1 {
  def main(args: Array[String]): Unit = {
    // 1.定义正则表达式 . 在scala中,字符串的后面+r,就定义了一个正则表达式
    // 2.指定要查找(查找)的目标字符串
    // 3.调用正则的方法,输出结果
    //例子:判断字符串中是否有数字?

    //1.定义正则表达式
    val reg ="\d".r
    // 2.指定要查找(查找)的目标字符串
    val target = "I like 我喜欢 数字 3,6,8!"

    println("找到的结果是:")
    reg.findAllIn(target).foreach(println)
  }


}
package Array

/**
 * 1. 处理字符串
 * 2. 查找:在一个大的字符串中,寻找是否有满足规则(条件)的子串
 * 3. 匹配、校验:判断指定的字符串是否满足某些规则(条件)
 * 这里的规则(条件)就是采用正则表达式写的特殊的字符串
 * !!!!!!!!正则表达式与具体的编程语言无关!!!!!!!!
 * 是一个独立、通用的计算机技术
 *
 *
 */
object array1 {
  def main(args: Array[String]): Unit = {
    // 1.定义正则表达式 . 在scala中,字符串的后面+r,就定义了一个正则表达式
    // 2.指定要查找(查找)的目标字符串
    // 3.调用正则的方法,输出结果
    //例子:判断字符串中是否有数字?

    // 1. \d 他表示今任意一个数字!

    //量词 :表示 前面的规则要重复几次?
    // 1. {11} : 表示重复11次。\d{11} 他可以表达一个去11位

    //1.定义正则表达式
    val reg ="\d{11}".r
    // 2.指定要查找(查找)的目标字符串
    val target = "I like 我喜欢 数字 12378786645!"

    println("找到的结果是:")
    reg.findAllIn(target).foreach(println)
  }


}
  • 字符类相关:

  • [abc]:正字符组,匹配a、b、c中的任意一个字符。

  • [^abc]:负字符组,匹配除a、b、c之外的任意一个字符。

  • \d:匹配任意一个数字字符。

  • \D:匹配任意一个非数字字符。

  • \w:匹配任意一个字母、数字或下划线字符。

  • \W:匹配任意一个非字母、数字和下划线的字符。

  • \s:匹配任意一个空白字符。

  • \S:匹配任意一个非空白字符。
    边界符号:

  • ^:匹配字符串的开头。

  • $:匹配字符串的结尾。

(总结)

  • Scala 中通过字符串后缀 .r 可快速定义正则表达式对象,核心语法与 Java 正则兼容,需注意双反斜杠转义特殊字符

  • findAllIn 方法用于查找目标字符串中所有符合规则的子串,返回迭代器可通过foreach遍历

  • 正则中的^(开头)、$(结尾)用于限制匹配范围,{n}用于指定精确匹配次数,[ ]用于字符集匹配

  • 手机号正则匹配的核心规则为^1[356789]\d{9}$(匹配完整 11 位合法手机号),缺少$则仅匹配开头符合规则的子串


  • 完结撒花 !!!!!!!!!!
  • 制作不易 希望·一键三连 在此感谢关注的粉丝宝宝
  • 新来的宝宝可以关注下主播哟!!!!!