当前位置: 首页 > 后端技术 > PHP

正则表达式的定义

时间:2023-03-30 00:38:14 PHP

是描述字符串特征的一组字符。用于检查字符串是否包含某个子串,替换匹配的子串,或者从某个字符串中提取满足某个条件的子串等。语法使用斜杠作为分隔符,如/[-a-z]/。正则表达式分为普通字符和元字符。普通字符分为印刷字符和非印刷字符。打印字符包括字母字符、数字、标点符号和其他一些符号。非印刷字符是指打印在纸上后看不见的字符。包括空格、回车、制表符、垂直制表符、换行符、换页符等。元字符是指在正则表达式中具有特殊含义的字符,包括定界符、定位符、限定符、转义符、选择符等。限定符用于限制元素出现的次数。有6种?+*{n}{n,}{n,m}。限定符的默认模式是贪婪模式。贪心模式会匹配尽可能多的字符。添加一个?在他们之后将成为非贪婪模式。非贪婪模式会匹配尽可能少的字符,比如$subject='expressions';$pattern='/<.*>/';$res=preg_match_all($pattern,$subject,$matches);echo$matches[0][0];//resultForexpressions$res=preg_match_all('/<.*?>/',$subject,$matches);echo$matches[0][0];//结果用于定位器来描述字符串或单词的边界,即单词和空格之间的位置,^和$指的是开头和字符串的结尾,\b描述了单词的前后边界,\B表示非单词边界。限定符不能与定位符一起使用。例如,'er\b'匹配“aneveraa”中的“er”,但不匹配“averb”中的“er”。'er\B'匹配“verb”中的“er”,但不匹配“never”中的“er”。选择器括号是用来让被包围的部分作为一个整体存在的,可以用限定符修饰,比如(aa)*,被包围的部分也会变成一个子表达式缓存起来供后续引用,比如(aa)b\1可以匹配aabaa或aabaac,引用时最大只能是\99,也就是说缓冲区最多只能容纳99个子表达式。如果不需要引用,可以使用?:来禁用缓存,例如'industr(?:y|ies)是比'industry|industries'更短的表达式。其中?:是非捕获元字符之一,另外两个非捕获元字符是?=和?!(?=pattern)前向查找,匹配任意字符串匹配模式开头的搜索字符串。这是一个非获取匹配,即匹配不需要获取以备后用。例如,“Windows(?=95|98|NT|2000)”将匹配“Windows2000”中的“Windows”,但不匹配“Windows3.1”中的“Windows”。lookahead不消耗字符,即在匹配发生后,在最后一个匹配之后立即开始搜索下一个匹配,而不是在包含lookahead的字符之后;(?!pattern)Negativelookahead,匹配任何不匹配pattern的字符串开头的搜索字符串。这是一个非获取匹配,即匹配不需要获取以备后用。例如,“Windows(?!95|98|NT|2000)”将匹配“Windows3.1”中的“Windows”,但不匹配“Windows2000”中的“Windows”。预检不消耗字符,即匹配发生后,在上一个匹配后立即开始搜索下一个匹配,而不是从包含预检的字符后开始。对于转义字符、圆括号和方括号、限定符、锚点和普通字符,例如“或”运算符,普通字符优先于替换运算符,例如“m|food”匹配“m”或“food”。要匹配“mood”或“food”,使用括号创建子表达式,即“(m|f)ood”PHP中正则表达式相关的函数preg_quote-转义正则表达式字符preg_match-执行正则表达式preg_match_all-执行全局正则表达式preg_replace-执行正则表达式并替换匹配搜索并用回调替换preg_replace_callback_array-执行正则表达式搜索并用回调替换preg_split-用正则表达式拆分字符串preg_last_error-返回上次执行的PCRE正则表达式的错误代码preg_grep返回给定数组Arraystrposofelementsininputthatmatchpatternpattern-仅检查一个字符串是否包含另一个字符串