正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式中的符号
符号 | 描述 | 示例 |
---|---|---|
str | 匹配文本字符串的字面值str | abc |
str1|str2 | 匹配正则表达式str1|str2 | abc|bca |
. | 匹配任何字符(除\n) | abc.abc |
^ | 匹配字符串起始部分 | ^Dear |
$ | 匹配字符串终止部分 | /str1/*str2$ |
* | 匹配0次或者多次前面出现的正则表达式 | [A-Za-z0-9]* |
+ | 匹配1次或者多次前面出现的正则表达式 | [a-z]+\.com |
? | 匹配0次或者1次前面出现的正则表达式 | str? |
{N} | 匹配N次前面出现的正则表达式 | [A-Z]{3} |
{M,N} | 匹配M到N次(包括M和N)前面出现的正则表达式 | [0,9]{3,6} |
[…] | 匹配括号中说明的字符集的任意单一字符 | [abc] |
[…x-y…] | 匹配x-y范围中的任意单一字符 | [A-Za-z0-9] |
[^…] | 不匹配此字符集中出现的任何一个字符,包括某一范围的字符(如果在此字符集中出现) | [^aedv],[^A-Z] |
(*|+|?|{})? | 用于匹配上面频繁出现/重复出现符号的非贪婪版本(*、+、?、{}) | .*?[A-Z] |
(…) | 匹配封闭的正则表达式,然后另存为子组 | (A(B(C))) |
正则表达式中的特殊字符
特殊字符 | 描述 | 示例 |
---|---|---|
\d | 匹配任何十进制数字,与[0-9]一致(\D与\d相反,不匹配任何十进制数字) | f\d.txt |
\w | 匹配任何字母数字字符,与[A-Za-z0-9]相同(\W与之相反) | [A-Za-z]\w+ |
\s | 匹配任何空格字符,与[\n\t\r\v\f]相同(\S与之相反) | of\sthe |
\b | 匹配任何单词边界(\B与之相反) | \bThe\b |
\N | 匹配已保存的子组N(参见上面的(…)) | price:\16 |
\c | 逐字匹配任何特殊字符c(即,仅按照字面意义匹配,不匹配特殊含义) | \.,\\,\* |
\A(\Z) | 匹配字符串的起始(结束)(如上面介绍的^和$) | \ADear |
正则表达式中的扩展表示法
(?str)
在正则表达式中嵌入一个或者多个特殊“标记”参数(或者通过函数/方法)
(?:…)
表示一个匹配不用保存的分组
(?P<name>)
向一个仅由name标识而不是数字ID标识的正则分组匹配
(?P=name)
在同一字符串中匹配由(?P
(?#…)
表示注释,所有内容都被忽略
(?=…)
匹配条件是如果…出现在之后的位置,而不使用输入字符串;称作正向前视断言
(?!…)
匹配条件是如果…不出现在之后的位置,而不使用输入字符串;称作负向前视断言
(?<=…)
匹配条件是如果…出现在之前的位置,而不使用输入字符串;称作正向后视断言
(?<!…)
匹配条件是如果…不出现在之前的位置,而不是用输入字符串;称作负向后视断言
(?(id/name)Y|N)
如果分组所提供的id或者name(名称)存在,就返回正则表达式的条件匹配Y,如果不存在,就返回N;|N是可选项(也就是说是可省略的)。ps: 有点像C++中的三目运算符
贪婪模式vs非贪婪模式
〇 贪婪模式 在整个表达式匹配成功的前提下,尽可能多的匹配
〇 非贪婪模式 在整个表达式匹配成功的前提下,尽可能少的匹配
默认是贪婪模式