Artículo Actualizado: 03/30/2020
En primer lugar, la sintaxis
1, los caracteres no imprimibles
operadores | explicación | Ejemplos |
---|---|---|
\cx |
los caracteres de control de ajuste especificados por el x | \ Cm de un partido Control-M o de un retorno de carro. El valor de x debe ser A-Z o a-z uno. De lo contrario, c como un literal 'c' de caracteres. |
\f |
Coincidir para una página web | equivalente \x0c y\cL |
\n |
Coincide con un carácter de nueva línea | equivalente \x0a y\cJ |
\r |
Un partido de retorno de carro | equivalente \x0d y\cM |
\s |
Coincide con cualquier espacio en blanco , incluidos los espacios, tabulaciones, saltos de página, etc. |
equivalente a [ \f\n\r\t\v] |
\S |
Coincide con cualquier carácter no está en blanco | equivalente a [^ \f\n\r\t\v] |
\t |
Una ficha de juego | equivalente \x09 y\cI |
\v |
Que coincide con una pestaña vertical, | equivalente \x0b y\cK |
2, caracteres especiales
operadores | explicación | Ejemplos |
---|---|---|
. |
Expresar cualquier carácter individual | |
[ ] |
Personajes, un solo carácter se da en el rango de | [abc] Representa a, b, c, [a-z] representa un único carácter az |
[^ ] |
No caracteres, se le da un carácter único a la zona negativa | [^abc] Para no representar un carácter único a, b, c de |
* |
Anterior personaje 0 una vez o expansión ilimitada |
abc* Representa AB, ABC, ABCC, ABCCC etc. |
+ |
Anterior personaje 1 una vez o expansión ilimitada |
abc+ Representa abc, ABCC, ABCCC etc. |
? |
carácter anterior 0 una vez o 1 prorrogó dos veces |
abc? Representa ab, abc |
| |
Un dejó cualquier expresión | abc|def Él representa abc, def |
^ |
Coincide con el comienzo de la cadena de | ^abc ABC y representa el inicio de una cadena |
$ |
Final de la cadena | abc$ ABC representa el final de una cadena y , si el objeto RegExp conjunto de Multiline bienes, también coincide $ '\n' o'\r' |
( ) |
marcado de paquetes, uso interno | operador |
(abc) Él representa abc, (abc|def) representa abc, def |
\d |
digital | equivalente a[0-9] |
\w |
Un carácter de palabra | equivalente a [A-Za-z0-9] |
\b |
Coincide con un límite de palabra, es decir, se refiere a la ubicación y los espacios entre las palabras. | Por ejemplo, er\b coincida never en er , pero no puede coincidir con verb el er . |
\B |
Coincidencia de límite de palabra. er\B Partidos verb en er , pero no puede coincidir con never el er . |
|
\d |
Coincide con un carácter dígitos. | equivalente a [0-9] |
\D |
Que coinciden con un carácter no numérico. | equivalente a [^0-9] |
\f |
Coincidir con un carácter de avance. | equivalente \x0c y\cL |
\n |
Coincide con un carácter de nueva línea. | equivalente \x0a y\cJ |
\r |
Coincidencia de un retorno de carro. | equivalente \x0d y\cM |
\s |
Coincide con cualquier espacio en blanco, incluidos los espacios, tabulaciones, saltos de página, y así sucesivamente. equivalente a[\f\n\r\t\v] |
|
\S |
Coincide con cualquier carácter no está en blanco. equivalente a[^\f\n\r\t\v] |
|
\t |
Una pestaña correspondiente. equivalente \x09 y\cI |
|
\ |
Que coincide con una pestaña vertical. | Es equivalente a \x0b y \cK . |
\w |
Coincide con cualquier carácter de palabra, incluido el subrayado. equivalente a[A-Za-z0-9_] |
|
\W |
Coincide con cualquier carácter que no sea la palabra. equivalente a[^A-Za-z0-9_] |
|
\xn |
Partidos n, donde n es un valor hexadecimal de escape. Los valores de escape hexadecimales deben ser determinados por dos dígitos. Por ejemplo, '\ x41' coincidirá con "A". '\ X041' es equivalente a '\ x04' y "1". Las expresiones regulares se pueden utilizar en la codificación ASCII. . | |
\num |
A juego num , que num es un entero positivo. Una referencia al partido adquirida. |
Por ejemplo, (.)\1 búsqueda de dos caracteres idénticos consecutivos. |
\n |
Identifica un valor de escape octal o una referencia hacia atrás. Si \n al menos antes de n la sub-expresión de una adquisición, entonces n es una parte posterior referencia. De lo contrario, si n los números octales (0-7) , entonces n es un valor de escape octal. |
|
\nm |
标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7) ,则 \nm 将匹配八进制转义值 nm 。 |
|
\nml |
如果 n 为八进制数字 (0-3) ,且 m 和 l 均为八进制数字 (0-7) ,则匹配八进制转义值 nml |
|
\un |
匹配 n ,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。 |
例如, \u00A9 匹配版权符号 © |
3、限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有
*
或+
或?
或{n}
或{n,}
或{n,m}
共6种。
*
、
+
和?
限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 `? 就可以实现非贪婪或最小匹配。
操作符 | 说明 | 实例 |
---|---|---|
{m} |
扩展前一个字符 m 次 |
ab{2}c 表示 abbc |
{m,} |
扩展前一个字符至少m 次 |
ab{2,}c 表示 abbc、abbbc、abbbbc等 |
{m,n} |
扩展前一个字符 m 至 n 次(含 n) |
ab{1,3}c 表示 abc、abcc |
4、各个操作符的优先级
注:相同优先级的从左到右进行运算,不同优先级的运算先高后低。各种操作符的优先级从高到低如下:
操作符 | 描述 |
---|---|
\ |
转义符 |
() , (?:) , (?=) ,[] |
圆括号和方括号 |
* ,+ ,? ,{n} ,{n,} , {n,m} |
限定符 |
^ , $ , \anymetacharacter |
位置和顺序 |
| |
“或”操作 |
5、其他说明
操作符 | 描述 |
---|---|
(pattern) |
匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到。 在VBScript 中使用 SubMatches 集合, 在JScript 中则使用 $0…$9 属性。 要匹配圆括号字符,请使用 ‘(’ 或 ‘)’。 |
(?:pattern) |
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。 这在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。例如, industr(?:y|ies) 就是一个比industry|industries 更简略的表达式。 |
(?=pattern) |
正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配。 也就是说,该匹配不需要获取供以后使用。 例如, Windows(?=95|98|NT|2000) 能匹配 Windows 2000" 中的 "Windows ,但不能匹配 Windows 3.1" 中的 "Windows 。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索, 而不是从包含预查的字符之后开始。 |
(?!pattern) |
负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配。 也就是说,该匹配不需要获取供以后使用。例如 Windows (?!95|98|NT|2000) 能匹配 Windows 3.1 中的 Windows ,但不能匹配 Windows 2000 中的 Windows 。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始 |
x|y |
匹配 x 或 y。例如,z|food 能匹配 z 或 food 。(z|f)ood 则匹配 zood 或 food |
二、实战演练
语法 | 描述 |
---|---|
^[A-Za-z]+$ |
由 26 个字母组成的字符串 |
^[A-Za-z0-9]+$ |
由 26 个字母和数字组成的字符串 |
^-?\d+$ |
整数形式的字符串 |
^[0-9]*[19][0-9]*$ |
正整数形式的字符串 |
[1-9]\d{5} |
中国境内的邮政编码,6位 |
[\u4e00-\u9fa5] |
匹配中文字符 |
\d{3}-\d{8}|\d{4|-\d{7} |
国内电话号码,010-12345678 |
三、Re库的使用
1、Re库的基本函数
函数 | 说明 |
---|---|
re.search() |
在一个字符串中搜索匹配正则的第一个位置,返回 match 对象 |
re.match() |
从一个字符串的开始位置起匹配正则,返回 match 对象 |
re.findall() |
搜索字符串,以列表形式返回全部能匹配的子串 |
re.split() |
将一个字符串按正则匹配结果进行分割,返回列表类型 |
re.finditer() |
搜索字符串,饭后一个匹配结果的迭代类型,每个迭代元素是 match 对象 |
re.sub() |
在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串 |
2、实战演练使用函数
语法格式 re.search(pattern, string, flags=0)
其中 flags 是正则表达式使用时的控制标记,常用的比如:
常用标记 | 说明 |
---|---|
re.I re.IGNORECASE |
忽略正则表达式中的大小写,[A-Z] 能匹配到小写字符 |
re.M re.MULTILINE |
正则表达式中的^ 操作符能够将给定字符串的每行当做匹配开始 |
re.S re.DOTALL |
正则表达式中的. 操作符能够匹配所有重复,默认匹配除换行外的所有字符 |
四、Enjoy!
注1:推荐两个正则在线练习网站
注2:英文可在线练习:Online regex tester and debugger
注3:正则表达式可视化:https://regexper.com/