欢迎光临
我们一直在努力

正则表达式

Regular Expression(正则表达式)

1、简介

正则表达式:由普通字符和特殊字符组成的字符串,这个字符串构成了一个搜索模式(pattern),被用来在文本中进行搜索、匹配、替换或分割操作。

​语法格式: /pattern/flags pattern 表示模式 flags 表示修饰符

主要用途

  • 文本搜索与匹配:快速判断一段文本中是否包含符合特定模式的子串。
  • 文本替换:将文本中所有匹配特定模式的部分替换为新的内容。
  • 文本提取与分割:从一大段文本中精确地提取出我们关心的部分,或者根据特定的分隔符将文本切分成数组。

应用场景

  • 数据验证:确保用户输入的数据符合预期的格式。
  • 文本搜索与过滤:大量文本中快速定位信息。
  • 文本替换与清洗:批量修改文本内容,使其规范化。
  • 文本提取与解析:从非结构化的文本中提取结构化的数据。
  • 字符串分割:使用复杂的规则,而不仅仅是单个字符,来分割字符串。

2、正则表达式字符和特性

字符匹配

  • 普通字符:包括没有显式指定为元字符的所有可打印和不可打印字符。

    ASCII可打印字符:空格,数字,字母,标点符号和符号

    ​ 非打印字符:换行\\n,回车\\r,制表\\t等控制字符

  • 元字符:元字符具有特殊的含义。

基本元字符

  • .:匹配任意字符(除了换行符)。
  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • \\:转义字符,用于匹配特殊字符本身。

量词元字符(限定符)

限定符出现在范围表达式之后,因此它应用于整个范围表达式

  • *:匹配前面的模式零次或多次。
  • +:匹配前面的模式一次或多次。
  • ?:匹配前面的模式零次或一次。
  • {n}:匹配前面的模式恰好 n 次。
  • {n,}:匹配前面的模式至少 n 次。
  • {n,m}:匹配前面的模式至少 n 次且不超过 m 次。

*,+ 限定符都是贪婪的,它们会尽可能多地匹配文字。在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配

边界匹配元字符(定位符)

  • \\b:匹配单词边界。
  • \\B:匹配非单词边界。

不能将限定符与定位符一起使用

分组和选择元字符

  • ( ):用于分组和捕获子表达式。
  • (?: ):用于分组但不捕获子表达式。
  • |:“或”关系

正向和负向预查

  • ?=:exp1(?=exp2):查找 exp2 前面的 exp1(正向前查)
  • ?<=:(?<=exp2)exp1:查找 exp2 后面的 exp1(正向后查)
  • ?!:exp1(?!exp2):查找后面不是 exp2 的 exp1(负向前查)
  • ?<!:(?<!exp2)exp1:查找前面不是 exp2 的 exp1(负向后查)

字符类元字符

  • [ ]:匹配括号内的任意一个字符。例如,[abc] 匹配字符 “a”、“b” 或 “c”。
  • [^ ]:匹配除了括号内的字符以外的任意一个字符。例如,[^abc] 匹配除了字符 “a”、“b” 或 “c” 以外的任意字符。
  • -:在字符类中表示范围

特殊字符类元字符

  • \\d:匹配任意数字,等价于 [0-9]
  • \\D:匹配任意非数字,等价于 [^0-9]
  • \\w:匹配任意单词字符(字母、数字、下划线),等价于 [a-zA-Z0-9_]
  • \\W:匹配任意非单词字符,等价于 [^a-zA-Z0-9_]
  • \\s:匹配任意空白字符(空格、制表符、换行符等)
  • \\S:匹配任意非空白字符

其他元字符

  • \\n:匹配换行符
  • \\t:匹配制表符
  • \\r:匹配回车符
  • \\f:匹配换页符
  • \\v:匹配垂直制表符

3、修饰符

正则表达式修饰符(也称为模式修饰符或标记)是用于改变正则表达式匹配行为的特殊指令

i (ignore case) – 忽略大小写

  • 使匹配不区分大小写。示例:/abc/i 可以匹配 “abc”, “Abc”, “ABC” 等

g (global) – 全局匹配

  • 查找所有匹配项,而不是在第一个匹配后停止。示例:在字符串 “ababab” 中,/ab/g 会匹配所有三个 “ab”

m (multiline) – 多行模式

  • 改变 ^ 和 $ 的行为,使其匹配每行的开头和结尾,而不仅是整个字符串的开头和结尾。示例:在多行字符串中,/^abc/m 会匹配每行开头的 “abc”

s (single line/dotall) – 单行模式

  • 使点号 . 匹配包括换行符在内的所有字符
  • 在JavaScript中称为"dotall"模式,使用 /s 修饰符。示例:/a.b/s 可以匹配 “a\\nb”

u (unicode) – Unicode模式

  • 启用完整的Unicode支持
  • 正确处理UTF-16代理对和Unicode字符属性。示例:/\\p{Script=Greek}/u 可以匹配希腊字母

y (sticky) – 粘性匹配

  • 从目标字符串的当前位置开始匹配(使用lastIndex属性)
  • 类似于^锚点,但针对的是匹配的起始位置。示例:在JavaScript中,/a/y 会从lastIndex开始匹配 “a”

x (extended) – 扩展模式

  • 忽略模式中的空白和注释,使正则表达式更易读。示例:在PHP中,/a b c/x 等同于 /abc/

4、运算优先级

优先级从高到低的顺序

  • 转义符号: \\ 是用于转义其他特殊字符的转义符号。它具有最高的优先级。

  • 括号: 圆括号 () 用于创建子表达式,具有高于其他运算符的优先级。

  • 量词: 量词指定前面的元素可以重复的次数。

  • 字符类: 字符类使用方括号 [] 表示,用于匹配括号内的任意字符。

  • 断言: 断言是用于检查字符串中特定位置的条件的元素。

    示例:^ 表示行的开头,$ 表示行的结尾。

  • 连接: 连接在没有其他运算符的情况下表示字符之间的简单连接。

    示例:abc 匹配 “abc”。

  • 管道: 管道符号 | 表示"或"关系,用于在多个模式之间选择一个。

    示例:cat|dog 匹配 “cat” 或 “dog”。

赞(0)
未经允许不得转载:171主机测评 » 正则表达式
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址