正则表达式语法

正则表达式语法

正则表达式(Regular Expression,简称 regex)是一种用于匹配字符串的模式。它由一系列字符和特殊符号组成,用于定义搜索模式。以下是正则表达式的基本语法规则:

1. 普通字符

  • 普通字符(如字母、数字、空格等)直接匹配它们自己。
    • 示例:a 匹配字符 “a”。

2. 特殊字符

  • 特殊字符在正则表达式中有特殊含义,需要使用反斜杠 \ 进行转义。
    • 示例:\. 匹配字符 “.”。

3. 字符类

  • [...]:匹配括号内的任意一个字符。
    • 示例:[abc] 匹配 “a”、“b” 或 “c”。
  • [^...]:匹配不在括号内的任意一个字符。
    • 示例:[^abc] 匹配除了 “a”、“b”、“c” 之外的任意字符。
  • [a-z]:匹配指定范围内的任意一个字符。
    • 示例:[a-z] 匹配任意小写字母。

4. 预定义字符类

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

5. 量词

  • *:匹配前面的字符零次或多次。
    • 示例:a* 匹配 “”、“a”、“aa” 等。
  • +:匹配前面的字符一次或多次。
    • 示例:a+ 匹配 “a”、“aa” 等。
  • ?:匹配前面的字符零次或一次。
    • 示例:a? 匹配 “” 或 “a”。
  • {n}:匹配前面的字符恰好 n 次。
    • 示例:a{2} 匹配 “aa”。
  • {n,}:匹配前面的字符至少 n 次。
    • 示例:a{2,} 匹配 “aa”、“aaa” 等。
  • {n,m}:匹配前面的字符至少 n 次,至多 m 次。
    • 示例:a{2,4} 匹配 “aa”、“aaa” 或 “aaaa”。

6. 边界匹配

  • ^:匹配字符串的开头。
    • 示例:^a 匹配以 “a” 开头的字符串。
  • $:匹配字符串的结尾。
    • 示例:a$ 匹配以 “a” 结尾的字符串。
  • \b:匹配单词边界。
    • 示例:\bword\b 匹配 “word” 这个单词。
  • \B:匹配非单词边界。

7. 分组和捕获

  • (...):将括号内的内容作为一个分组,并捕获匹配的文本。
    • 示例:(abc) 匹配 “abc” 并捕获。
  • (?:...):非捕获分组,匹配但不捕获。
    • 示例:(?:abc) 匹配 “abc” 但不捕获。

8. 选择

  • |:匹配左边或右边的表达式。
    • 示例:a|b 匹配 “a” 或 “b”。

9. 转义字符

  • \:用于转义特殊字符。
    • 示例:\. 匹配字符 “.”。

10. 零宽断言

  • (?=...):正向先行断言,匹配后面跟着指定模式的位置。
    • 示例:a(?=b) 匹配后面跟着 “b” 的 “a”。
  • (?!...):负向先行断言,匹配后面不跟着指定模式的位置。
    • 示例:a(?!b) 匹配后面不跟着 “b” 的 “a”。
  • (?<=...):正向后行断言,匹配前面是指定模式的位置。
    • 示例:(?<=a)b 匹配前面是 “a” 的 “b”。
  • (?<!...):负向后行断言,匹配前面不是指定模式的位置。
    • 示例:(?<!a)b 匹配前面不是 “a” 的 “b”。

11. 贪婪与非贪婪匹配

  • 默认情况下,量词是贪婪的,会尽可能多地匹配字符。
  • 在量词后加上 ? 可以使其变为非贪婪模式,尽可能少地匹配字符。
    • 示例:a*? 匹配零个或多个 “a”,但尽可能少地匹配。

示例

  • 匹配电子邮件地址:^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
  • 匹配 URL:^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$

正则表达式的语法非常强大且灵活,掌握这些基本规则可以帮助你处理复杂的字符串匹配任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值