正则操作

比较常见的正则格式例如邮箱手机可以直接用在线正则生成获取,

自己写的正则式对不对可以用在线正则验证工具来验证(例如regex), 在第一个输入式,第二个输入要匹配的内容

在VSCODEor安装的idea中安装了插件也可用正则来搜索自己的代码

PHP中函数subject为字符串,$matches为成功返回值

preg_match(subject,pattern,matches)
//匹配所有查询结果
———————————————————————————————————————
公式:/原子和元字符/模式修正符

正则定界符//:

除了字母、数字和反斜线\以外的任何字符都可以为定界符号,比如 | |、//、{}、!!等等,但是需要注意,如果没有特殊需要,我们都使用正斜线//作为正则表达式的定界符号。

原子

只要一个正则表达式可以单独使用的字符,就是原子。

原子构成方式

1,需要匹配的所有打印(所有可以在屏幕上输出的字符串)和非打印字符(看不到的,比如空格,换行符等等)

2,需要匹配的所有有意义的字符,想做为原子使用,统统使用“\”转义字符进行转义即可。如:. * + ? ( <>。

注意:" \ "转义字符可以将有意义的字符转成没意义的字符,还可以将没意义的字符转为有意义的字符。如:\d表示任意一个十进制的数字。

3,在正则表达式中可以直接使用一些系统提供的代表范围的原子,如下面的表格所示:

代表范围的原子 说明 类原子

\d 表示任意一个十进制的数字 [0-9]
\D 表示任意一个除数字这外的字符 [^0-9]
\s 表示任意一个空白字符,空格、\n\r\t\f [\n\r\t\f ]
\S 表示任意一个非空白 [^\n\r\t\f ]
\w 表示任意一个字 a-zA-Z0-9_ [a-zA-Z0-9_]
\W 表示任意一个非字,除了a-zA-Z0-9_以外的任意一个字符 [^a-zA-Z0-9_]

4,自定义原子表(使用方括号[]),可以匹配方括号中的任何1个原子。

在上面的表格中我们已经将系统提供的范围原子使用自定义的方式作了等价转换。由于系统不可能提供所有我需要的原子,所以自定义原子表就显得十分必要了,比如我们想要匹配字母或者数字,就需要将原子写成[a-zA-Z0-9]。

元字符是原子的解释器

所谓元字符就是指那些在[正则表达式]的专用字符,可以用来规定其原子在目标对象中的出现模式。

例如

// * 匹配前面的子表达式零次或多次。例如,zo能匹配“z”以及“zoo”。等价于{0,}。
+匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“do”。?等价于{0,1}。
^:脱字符,单独使用是限制起始原子,放在方括号中是取反。
.:可以匹配任意字符
$ :匹配一定以前面原子结尾的字符
\:将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符
{n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
{n,} n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
{n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。
\d{17}[\d|x]|\d{15}

模式修饰符

又叫模式修正符,是在正则表达式的定界符之外使用。主要用来调整正则表达式的解释,提扩展了正则表达式在匹配、替换等操作的某些功能,增强了正则的能力。

i (PCRE_CASELESS)
如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。
m (PCRE_MULTILINE)
默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行), "行首"元字符 (^) 仅匹配字符串的开始位置, 而"行末"元字符 () 仅匹配字符串末尾, 或者最后的换行符(除非设置了 D 修饰符)。这个行为和 perl 相同。 当这个修饰符设置之后,“行首”和“行末”就会匹配目标字符串中任意换行符之前或之后,另外, 还分别匹配目标字符串的最开始和最末尾位置。这等同于 perl 的 /m 修饰符。如果目标字符串 中没有 ,设置这个修饰符不产生任何影响。
s (PCRE_DOTALL)
如果设置了这个修饰符,模式中的点号元字符匹配所有字符,包含换行符。如果没有这个 修饰符,点号不匹配换行符。这个修饰符等同于 perl 中的/s修饰符。 一个取反字符类比如 [^a] 总是匹配换行符,而不依赖于这个修饰符的设置。
x (PCRE_EXTENDED)
如果设置了这个修饰符,模式中的没有经过转义的或不在字符类中的空白数据字符总会被忽略, 并且位于一个未转义的字符类外部的#字符和下一个换行符之间的字符也被忽略。 这个修饰符 等同于 perl 中的 /x 修饰符,使被编译模式中可以包含注释。 注意:这仅用于数据字符。 空白字符 还是不能在模式的特殊字符序列中出现,比如序列 (?( 引入了一个条件子组(译注: 这种语法定义的 特殊字符序列中如果出现空白字符会导致编译错误。 比如(?(就会导致错误)。

你可能感兴趣的:(正则操作)