常用的php正则表达及语法注解总结

WJ
Freigeben: 2023-04-08 17:54:01
nach vorne
2800 Leute haben es durchsucht

基本语法

界定符:

标识一个正则表达式的开始和结束,用'/'或'#'或'{ }',因为语法'{ }'也可能是正则表达式的运算符,为了避免混淆,所以不建议使用。建议的用法如下:

Copy$pattern = '/[0-9]/'; //我喜欢这个,看起来比较简洁 $pattern = '#[0-9]#';
Nach dem Login kopieren

原子:

可见原子:Unicode编码表中可用键盘输出后肉眼可见的字符,例如:标点 ; . / ? 或者英文字母,汉字等等可见字符
不可见原子:Unicode编码表中可用键盘输出后肉眼不可见的字符,例如:换行符 \n,Tab制表符\t, 空格等等,
一般只用这三个(换行符一般和其他字符一起匹配,因为只有换行符是匹配不到的)
小提示:匹配运算符前面需要加 '\' 例如:'+' 号,匹配的话需要写出 '\+'

元字符

原子的筛选方式:

| 匹配两个或者多个分支选择
[] 匹配方括号中的任意一个原子
[^] 匹配除方括号中的原子之外的任意字符;
例子:Duang|duang 或者 [Dd]uang 都可以匹配到Duang和duang
区间写法:[a-z]匹配a到z的字符, [0-9]匹配0到9的字符。也可以[a-z0-9]
. 匹配除换行符之外的任意字符
\d 匹配任意一个十进制数字,即{0-9]
\D 匹配任意一个非十进制数字[^0-9] 相当于[^\d]
\s 匹配一个不可见的原子,即[\f\n\r\t\v]
\S 匹配一个可见的原子,即[\f\n\r\t\v],相当于[\s]z
\w 匹配任意一个数字、字母或下划线,即[0-9a-zA-Z_]
\W 匹配任意一个非数字、字母或下划线,[0-9a-zA-Z_],相当于[\w]

量词

{n} 表示其前面的原子刚好出现了n次。
[n] 表示其前面的原子最少出现n次
{n,m} 最少出现n次,最多出现m次
* 匹配0次、一次或者多次,即{0,}
+ 匹配一次或多次,即{1,}
? 匹配0或1次,即{0,1}

边界控制

^ 匹配字符串开始的位置
$ 匹配字符串结尾的位置
例:^John 可以匹配到:John 但是匹配不到:123John,因为规定了字符串以John开头

模式单元

() 匹配其中的整体为一个原子, 如: (X|x)iaomi , 可以匹配到 xiaomi

修正模式

贪婪匹配

匹配结果存在歧义时取其长(默认)

懒惰匹配

匹配结果存在歧义时取其短,只需在正则表达式的后面'/'加上'U',例如'/[0-9]/U';
例子:

Copy$subject = "test__123123123"; preg_match('/test.+123/', $subject, $matches); //贪婪模式 var_dump($matches); preg_match('/test.+123/U', $subject, $matches); //懒惰模式var_dump($matches);
Nach dem Login kopieren

常见的修正模式:

U 懒惰匹配
i 忽略英文字母的大小写
x 忽略正则表达式的空白符
s 让元字符'.' 匹配包括换行符在内的所有字符

常用函数

preg_match

执行匹配正则表达式

preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) : int
Nach dem Login kopieren

pattern: 要搜索的模式,字符串类型。subject:输入字符串。match: 如果提供了参数matches,它将被填充为搜索结果,数据结构为一维数组。flags: 可以设置为PREG_OFFSET_CAPTURE,使用搜索结果的第0个元素为匹配的字符串,第1个元素为对应的偏移量(位置)offset: 搜索从目标字符串的起始位置开始匹配。

返回值:匹配次数
类似函数preg_match_all,参数与preg_match一致
区别:

preg_match:只匹配一次,搜索结构match的数据结果为一维数组preg_match_all:匹配全部,搜索结果match的数据结构为二维数组。

preg_replace

执行一个正则表达式搜索和替换,返回值为替换后的字符串

preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed
Nach dem Login kopieren

pattern:要搜索的模式。可以是一个字符串或字符串数组。replacement:用于替换的字符串或字符串数组subject:要进行搜索和替换的字符串或字符串数组。limit:替换的最大次数。默认是 -1(无限)。count:替换次数。
类似函数preg_filter,参数与preg_replace一致
区别(使用数组进行匹配的时候才看得出区别):preg_replace:不管是否有替换,返回全部结果preg_filter:只返回匹配的结果。

preg_split

通过一个正则表达式分隔字符串

preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] ) : array
Nach dem Login kopieren

$pattrn:用于搜索的模式,字符串形式。subject:输入字符串limit:将限制分隔得到的子串最多只有limit个,返回的最后一个 子串将包含所有剩余部分。flags:有以下标记的组合:
-- 1. PREG_SPLIT_NO_EMPTY: 返回分隔后的非空部分。
-- 2. PREG_SPLIT_DELIM_CAPTURE: 用分隔符'()'括号把匹配的捕获并返回。
-- 3. PREG_SPLIT_OFFSET_CAPTURE: 匹配返回时将会附加字符串偏移量

PREG_SPLIT_DELIM_CAPTURE这个参数可能比较难明白,举个例子看看:

Copy$subject = "1a23b"; $a = preg_split('/[\d]/', $subject, -1, PREG_SPLIT_NO_EMPTY); var_dump($a); $a = preg_split('/([\d])/', $subject, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); var_dump($a);
Nach dem Login kopieren

输出如下:

array (size=2)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
array (size=5)
0 => string '1' (length=1)
1 => string 'a' (length=1)
2 => string '2' (length=1)
3 => string '3' (length=1)
4 => string 'b' (length=1)

preg_grep

返回匹配模式的数组条目

preg_grep ( string $pattern , array $input [, int $flags = 0 ] ) : array
Nach dem Login kopieren

$pattern:要搜索的模式,字符串形式$input:输入数组flags:如果不设置则返回匹配的数目,设置PREG_GREP_INVERT则返回不匹配的数目。

preg_quote

转义正则表达式字符,返回为转义后的字符串

preg_quote ( string $str [, string $delimiter = NULL ] ) : string

str:输入字符串delimiter:需要转义的字符串

Das obige ist der detaillierte Inhalt von常用的php正则表达及语法注解总结. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!