正则表达式

正则表达式

正则表达式(Regular Expression,在代码中常简写为 regex、regexp 或 RE),又称 正规表示式、正规表示法、正规表达式、规则表达式、常规表示法,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

优先级

不同的正则表达式符号如何数学上的 + + + − - × \times × ÷ \div ÷ 一样,具体不同的优先级。

正则表达式优先级如下:

优先级符号
最高\
()(?:)(?=)[]
*+?{n}{n,}{n,m}
^$中介字符
次最低串接(即相邻字符连接在一起)
最低|

正则表达式语法

正则表达式等价说明
[abc]a|b|c匹配列出的任意字符。示例匹配字符 ‘a’ 或 ‘b’ 或 ‘c’。
[^abc]匹配未列出的任意字符。示例匹配字符 ‘a’、‘b’、‘c’ 以外的任意字符。
[a-z]匹配指定范围内的任意字符。示例匹配字符 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。
[^a-z]匹配任何不在指定范围内的任意字符。 示例匹配字符 ‘a’ 到 ‘z’ 范围之外的任意字符。
[a-zA-Z]匹配指定范围内的任意字符。范围组合。示例匹配字符 ‘a’ 到 ‘z’ 范围内的任意小写字母字符 和 ‘A’ 到 ‘Z’ 范围内的任意大写字母字符。
.[^\r\n]匹配除 “\r” “\n” 之外的任何单个字符。要匹配包括 “\r”“\n” 在内的任何字符,请使用像 “(.
(...)匹配满足条件的子串,如 (zone) 能够匹配 This is test zone, 1zone, zoneee, zona. 3个完整 “zone” 的位置。
(aa|bb)匹配满足条件的子串。示例匹配子串 ‘aa’ 或 ‘bb’
a?非贪心匹配。只匹配满足条件的,长度最小的串。如 [0-9]+ 是匹配 1 − ∞ 1 - \infty 1 个阿拉伯数字,但是 [0-9]+? 则匹配满足 [0-9]+ 的最小串。
a*匹配前面的子表达式零次或多次。示例匹配 0 − ∞ 0 - \infty 0 个 ‘a’
a+匹配前面的子表达式一次或多次。示例匹配 1 − ∞ 1 - \infty 1 个 ‘a’
a{3}aaa匹配确定的 3 次。示例匹配 ‘aaa’
a{3,}aaa|aaaa|aaaaa|...匹配确定的 3 − ∞ 3 - \infty 3 次。示例匹配 ‘aaa’, ‘aaaa’, ‘aaaaa’, …
a{3,6}aaa|aaaa|aaaaa|aaaaaa匹配确定的 3 − 6 3 - 6 36 次。示例匹配 ‘aaa’, ‘aaaa’, ‘aaaaa’, ‘aaaaaa’
^匹配输入字符串的开始位置。
$匹配输入字符串的结束位置。

特殊符号(转义)

部分符号有特殊的意义,需要使用 \ 进行转义

特殊符号等价说明
\b匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b” 可以匹配 “never” 中的 “er”,但不能匹配 “verb” 中的 “er”。
\B匹配非单词边界。“er\B” 能匹配 “verb” 中的 “er”,但不能匹配 “never” 中的 “er”。
\cx匹配由 x 指明的控制字符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 “c” 字符。控制字符的值等于 x 的值最低 5 比特(即对 3210 进制的余数)。例如,\cM 匹配一个 Control-M 或回车符。\ca 等效于 \u0001, \cb 等效于 \u0002, 等等…
\d[0-9]匹配一个数字字符。注意 Unicode 正则表达式会匹配全角数字字符。
\D[^0-9]匹配一个非数字字符。
\f\x0c\cL匹配一个换页符。
\n\x0a\cJ匹配一个换行符。
\r\x0d\cM匹配一个回车符。
\s[\f\n\r\t\v]匹配任何空白字符,包括空格、制表符、换页符等等。注意 Unicode 正则表达式会匹配全角空格符。
\S[^ \f\n\r\t\v]匹配任何非空白字符。
\t\x09\cI匹配一个制表符。
\v\x0b\cK匹配一个垂直制表符。
\w[A-Za-z0-9_]匹配包括下划线的任何单词字符。注意 Unicode 正则表达式会匹配中文字符。
\W[^A-Za-z0-9_]匹配任何非单词字符。
\xnn十六进制转义字符序列。匹配两个十六进制数字 nn 表示的字符。例如,"\x41" 匹配 “A”。"\x041" 则等价于 “\x04&1”。正则表达式中可以使用 ASCII 编码。
\num向后引用(back-reference)一个子字符串(substring),该子字符串与正则表达式的第 num 个用括号围起来的捕捉群(capture group)子表达式(subexpression)匹配。其中 num 是从 1 开始的十进制正整数,其上限可能是 9、31、99 甚至无限。例如:"(.)\1" 匹配两个连续的相同字符。
\n标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字(0-7),则 n 为一个八进制转义值。
\nm3 位八进制数字,标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字(0-7),则 \nm 将匹配八进制转义值 nm。
\nml如果 n 为八进制数字(0-3),且 m 和 l 均为八进制数字(0-7),则匹配八进制转义值 nml。
\unUnicode 转义字符序列。其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如,\u00A9 匹配著作权符号(©)。
\0匹配 NULL 字符。ASCII 为 0x00。注意 Unicode 正则表达式会匹配 \u2400 字符。
  • 12
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值