💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 正则表达式的语法规则 >[success]正则表达式由两部分构成:元字符和文本字符。 【元字符】是具有特殊含义的字符 【文本字符】就是普通的文本,如数字和字母 需要注意的是:PCRE风格的正则表达式一般都放置在定界符“/”之间,下面一一详细讲解。 ## 定界符和修饰符 ### 定界符 >[info] POSIX兼容正则表达式没有定界符,函数的相应参数会被认为是正则。 PERL兼容的正则表达式可以使用任不是字母、数字或反斜线(\)的字符作为定界符,如果作为定界符必须被用在表达式本身中,则需要用反斜线转义。在大多数使用 >[info]PCRE正则表达式的代码中,定界符都使用一个“/”,可在引号内表达的开始和结尾处看到,必须要记住,定界符并非表达式的一部分。也可以使用()、{}、[]和<>作为定界符。 ### 修饰符 >[info]POSIX兼容正则表达式没有修饰符 >[info]PERL兼容正则表达式中可能使用的修饰符(修饰符中的空格和换行被忽略,其他字符会导致错误),在PCRE表达式的最后一个定界符之后,可以添加一个修饰符来更改正则表达式的行为。修饰符的种类如下。 (1)i(PCRE_CASELESS):忽略大小写 (2)(PCRE_MULTILINE):设定此修饰符,会将一个字符串视为多行,行起始(^)和行结束($)除了匹配整个字符串开头和结束外,还分别匹配其中的换行符(\n);若无此修饰符,则不包括换行符。 (3)s(PCRE_DOTALL):当设定此修饰,模式中的圆点(.)匹配所有的字符,包括换行符(\n);若无些修饰符,则不包括找行符。 (4)x(PCRE_EXTENDED):当设定此修饰符,将模式中的空白字符(除了被转义的完全删除忽略)。 (5)e:如果设定了此修饰符,preg_replace()函数将在替换字符串中逆向引用做正常 使用此修饰符,其他PCRE函数将忽略之。 (6)A(PCRE_ANCHORED):如果设定了此修饰符,模式将被强制为“anchored”,即强制仅从目标字符串的开头开始匹配。 (7)D(PCRE_DOLLAR_ENDONLY):如果设定了此修饰符,模式中的行结束($)仅匹配目标字符串的结尾.没有此选 项时,如果最后一个字符是换行符的话,也会被匹配在里面。如果设定了m修饰符,则忽略此选项。 (8)S:当一个模式将被使用若干次时,为加速匹配得先对其进行分析。如果设定了此修饰符,则会进行额外的分析。目前,分析一个模式仅对没有单一固定起始字符的non-anchored模式有用。 (9)U(PCRE_UNGREEDY):使用“?”的默认匹配成贪婪状态的 (10)X(PCRE_EXTRA):模式中的任何反斜线后面跟上一个没有特殊意义的字母将会被导致错误,从而保留此组合以备将来扩充。默认情况下,一个反斜线后面跟一个没有特殊意义的字母被当作该字母本身。 (11)u(PCRE_UTF8)模式字符串被当成UTF-8。 ## 逻辑区隔 >[success]关于逻辑区隔,POSIX兼容的正则表达式和PERL兼容的正则表达式的逻辑区隔符号的作用和使用方法完全一致。 >[info][]:包含任选一个操作的相关信息 {}:包含匹配次数的相关信息 ():包含一个逻辑区间的相关信息,可被用来进行引用操作。 |:表示“或”,[ab]和a|b是等价的 ## 元字符与“[]”相关 >[success]有两组不同的元字符:一种是模式中除了方括号内都被识别的,另一个是在方括号“[]”内被识别 >[info](1)POSIX兼容的正则表达式和PERL兼容的正则表达式“[]”之外相同的元字符如下。 \:有数钏用途的通用转义符 ^:匹配字符串的开头 $:匹配字符串的结尾 ?:区配0或者1 *: 匹配0个或1个前面指定类型的字符 +:匹配1个或者多个前面指定类型的字符 >[info](2)POSIX兼容的正则表达式和PERL兼容的正则表达式"[]"之外不相同的元字符如下: PERL兼容的正则表达式匹配除了换行符外的任意一个字符; POSIX兼容的正则表达式匹配任意一个字符。 >[info](3)POSIX兼容的正则表达式和PERL兼容正则表达式“[]”之内相同元字符如下: \:有数种用途的通用转义符。 ^:取反字符,但仅当其为第一个字符时有效。 -:指定字符ASCII范围,仔细研究ASCII码,你会发现[W-c]等价于[WXYZ\\^_\\abc] >[info](4)POSIX兼容的正则表达式和PERL兼容的正则表达式“[]”之内不相同的元字符如下: POSIX兼容的正则表达式中中[a-c-e]的指定会抛出错误 PERL兼容的正则表达中[a-c-e]的指定等价于[a-e] ## 匹配次数与“{}”相关 >[info] POSIX兼容的正则表达式和PERL兼容的正则表达式在匹配次数方面完全 一致! {2}:表示匹配前面的字符两次 {2,}:表示匹配前面的字符两次或者多次,默认都是贪婪(尽可能多的匹配) {2,4}:表示匹配前面的字符两次,三次或者4次 ## 逻辑区间与“()”相关 >[info]使用()包含起来的区域是一个逻辑区间,逻辑区间的主要作用是体现一些字符出现的逻辑次序,另一个用处就晃可以用来引用(可以将此区间内的值引用给一个变量)。后一个作用比较奇特,请看下面的实例。 > ### 实例 与()相关的逻辑区间 >~~~ ><?php >$str="http://www.163.com"; >//POSIX兼容正则 >echo ereg_replace("(.+)", "<a href=\\1>\\1</a>",$str); >echo "<br />"; >//PERL兼容正则: >echo ereg_replace("/(.+)/", "<a href =$1>$1</a>",$str); >//显示两个连接 >?> >~~~ >[danger]在引用的时侯,括号是可以嵌套的,逻辑次序是按照“(”出现的次序来标定的。 ## 类型匹配 >[info] PHP正则表达式中有一些内置的通用字符簇,用于指定字符的处理范围。下面首先介绍POSIX兼容的正则表达式的类型匹配 [:upper:]:匹配所有的大写字母,和[A-Z]意义相同 [:lower:]:匹配所有的大写字母,和[a-z]意义相同 [:alpha:]:匹配所有的大小写字母,和[A-Za-z]意义相同 [:alnum:]:匹配所有的字母和数字,和[A-Za-z0-9]意义相同 [:digit:]:匹配所有的数字,和[0-9]意义相同 [:xdigit:]:匹配所有的十六进制字符,和[0-9A-Fa-f]意义相同 [:punct:]:匹配所有的标点符号,和[.,"'?!;:]意义相同 [:blank:]:匹配空格和TAB,和[\t]意义相同。 [:space:]:匹配所有的空白字符,和[\t\n\r\f\v]意义相同 [:cntrl:]:匹配所有的ASCII0~31之间的控制字符,包括TAB、退格符和"\"反斜线。 [:graph:]:匹配所有的可打印字符,和[^\t\n\r\f\v]意义相同 [:print:]:匹配所有的可打印字符和空格,和[^\t\n\r\f\v]意义相同 [:<:]:匹配单词的开始 [:>:]:匹配单词的结尾 >[info]PERL兼容的正则表达式的类型匹配如下,这些是POSIX所不支持的。 \a:alarm,即BEL字符('0) \cx:"control-x",其中x是任意字符 \e:escape('0B) \f:换页符 formfeed('0C) \n:换行符 newline('0A) \r:回车符 carriage return('0D) \t:制表符tab('0) \xhh:十六进制代码为hh的字符 \ddd:八进制代码为ddd的字符,或backreference \d:任意十制数字 \D:任意非十进制数的字符 \s:任意空白字符 \S:任意非空白字符 \w:任意”字“的字符 \W:任意”非字“的字符 \b:字分界线 \B:非字分界线 \A:目标的开头(独立于多行模式) \Z:目标的结尾或位于结尾的换行符前(独立于多行模式) \z:目标结尾(独立于多行模式) \G:目标中的第一个区配位置