search
Homephp教程php手册php正则学习
php正则学习Jun 06, 2016 pm 07:53 PM
phpDiscoverstudystudyregularcomputerOwnmy own

今天我在自己的电脑上发现自己以前学习用的正则的资料,拿出来晒一下,让大家看看,学习学习 一 . 正则表达式 1. 匹配符 1) 头匹配符 ^: 如 ^0754, 只匹配开头为 0754 的 字符 串 2) 尾匹配符 $: 如 0754$, 只匹配结尾为 0754 的字符串 3) 全字匹配 : 将 ^

今天我在自己的电脑上发现自己以前学习用的正则的资料,拿出来晒一下,让大家看看,学习学习

.正则表达式
1.
匹配符
    1)
头匹配符"^":^0754,只匹配开头为0754字符
    2)
尾匹配符"$":0754$,只匹配结尾为0754的字符串
    3)
全字匹配:^$结合,^0754$,匹配0754字符串
2.
转义字符
    1)
空字符:
        
换行\n
        
回车\r
        
制表符\t
    2)
其他字符:
        "$" \$
        "^" \^
        "+" \+
        "/" \/
3.
通配符
    1)*
:用来匹配前面一个字符是否在字符串中出现零次或多次.
    
1:'abc*',匹配含有ab的所有字符串。
    2)+
:......................................一次或多次.
    
2:'abc+',匹配含有abc的所有字符串。
    3)?
:......................................零次或一次.
    
3:只匹配含有ababc结尾不再含c的字符串。如abcaaabcaaab都可以,但abcc就不行。
4.
关于转义字符\$与双、单引号(php4环境)
    1)
正则表达式本身就是一个字符串。
    2)
当引号中含有$时,用双、单引号定义就有区别,区别如下:
        (1)
使用单引号定义时,解释器会把引号内所有字符(包括$在内)都原封不动的赋值给字符串变量
        (2)
使用双引号定义时,解释器会把引号内"$"字符以及其后的合法字符(字母、数字、下划线)翻译成变量,直到遇到一个非法字符才认为变量名结束,该非法字符及其后面的字符都被视为一般字符赋给字符串变量,直到遇到下一个"$"为止。
        (3)
注意:单个$出现在双引号的尾部,并且其后面不再有任何字符的时候,解释器不会将其翻译成变量。也不需要加转义\,当然不提倡。
        (4)
如果待匹配的字符中本身就有$,就无法用双引号来定义这个正则表达式,原因是转义字符\$在单,双引号中表示的意义不同:
            
双引号中,\$和单个的$意义是一样的,都是代表尾匹配符,因此c\$$=c\$=c\$\$=c$=c\$\$;双引号中,\$在任何时刻都只代表一个字符"$"echo "c\$$"结果是c$$,并且\$和单个的$(单个的$是指该$无法和其后字符组成变量名)是完全等效的,都是尾匹配符,所以双引号中是无法写入作为非尾匹配字符的字符"$"的,也正是这个原因,大多数需要匹配$时定义正则表达式只能用''
            
单引号中,\$的意义仅仅表示字符"$",尾匹配符是$,不管后面是否有合法变量名字符;单引号中,\$其实是两个字符,如不用于正则匹配将没有任何意义,echo 'c\$$'结果仍是c\$$。单作为正则表达式来使用,单引号中的\$表示的是特殊字符"$",而尾匹配符就是单独的$字符。
    3)
正则表达式的尾匹配符"$"和变量的定义符是相同的:
        
1:定义正则表达式为^ab$$pattern="^ab\$";转义字符\$在双引号中就表示字符$,结果是^ab$
        
2:如上题,使用$pattern="^ab$";显然是错误的,但是由于$在尾部,后面没有其他字符,所以依然适用。
        
3:以字符组合c$结尾的正则表达式:$pattern='c\$$';
        
4:如上题,$pattern="c\$$";正则表达式将\$视为尾匹配符,故只匹配以c结尾。

5."[]"方括号(字符簇)用法
    1)[]
匹配一个字符,在[]中使用^开头表示取非,即其后的字符全部是不匹配的。
    
1[a-zA-Z0-9]匹配所有大小写字母和数字。
    
2[\n\t\r\f]匹配所有空字符。
    
3[^A-Z]不匹配大写字母。
    
4^[^0-9]匹配不以数字开头的字符或字符串
    2)
特殊字符"."(句点)匹配除了"新行"之外的所有字符,模式^.abc$匹配任何以abc结尾的字符,但是不能匹配其本身。模式"."则可以匹配任何字符串,除了空字符串和只有一个"新行"字符的字符串。
    
1'^.abc$';匹配所有尾部含有abc的字符串,不匹配小数(新行),当不匹配abc
    
2'.';匹配所有字符串,但不匹配空值。
    
3'.abc';匹配所有含abc的字符串,小数等等都可以,前提是不以abc为首,不匹配abc
    
4'.abc$';匹配所有以abc结尾的字符串,任何小数等等都可以,不匹配abc
    3)php
提供了内置通用字符簇:
    [[:alpha:]]
任何字母
    [[:digit:]]
任何数字
    [[:alnum:]]
任何字母和数字
    [[:space:]]
任何空白字符
    [[:upper:]]
任何大写字母
    [[:lower:]]
任何小写字母
    [[:punct:]]
任何表点符号
    [[:xdigit:]]
任何十六进制数字
    [[:cntrl:]]
任何ASCII值小于32的字符
    
注意:以上字符簇有个特点,只要被匹配的字符或字符串中有此字符,即匹配正确,不管字符串是以什么方式组成的。
6."{}"
大括号用法
    1)
方括号只能匹配一个字符,而匹配多个字符只能用{}实现:{}用来确定前面内容出现的次数。{n}表示出现n次;{m,n}表示出现m~n次,包括mn次;{n,}表示出现n次或者n次以上。
    
1:^a{10}$;匹配aaaaaaaaaa
    
2:[0-9]{1,}$;匹配所有>0的数。
    2)"{}"
与通配符之间的关系
    ?  
相当于 {0,1} 零次或一次
    *  ..... {0,} 
零次或无数次
    +  ..... {1,} 
一次或无数次
7."()"
用法
    
圆括号"()"括住的pattern表示子模式,如$pattern='([1-9]{1}[0-9]{3})-([0-1]{1}[1-2]{1})-([0-3]{1}([0-9]|))';()扩住的就是一个个子模式,()相当于把他们独立起来,分别匹配而相互不干扰。
.POSIX风格正则表达式函数
1.ereg
    ereg(pattern,string,[array $regs]);
    eregi(pattern,string,[array $regs]);
    ereg
函数在string中找到满足pattern模式的文本,如果找到true,没找到false。如果有第三个参数$regs,那找到的文本将放在$regs[0]中,并且regs数组中将一次存放各个圆括号表达的子模式匹配的结果。$regs[1]中存放了第一个子模式所匹配的结果,$regs[2]中是第二个,顺序从左到右,依次类推。如果没有找到匹配的文本,$regs数组的值不会被改变。
    
注意:如果找到了匹配的文本,不管找到的子模式是多少个>9还是ereg()只会改变$regs数组前10个元素的值。但是这不会影响函数对子模式组合的匹配结果。ereg总是先匹配完,如果没发现匹配的文本就false,发现了就true。如果有子模式,会逐步根据这些子模式重新在字符串中寻找匹配的文本,直到$regs数组被填满10个元素或者所有子模式被匹配完,如果子模式少于10则剩余的$regs将被赋空值。总之一句话,匹配归匹配,$regs$regs$regs只有10个值。
    eregi()
函数与ereg()基本用法相同,只是eregi对大小写不敏感。
2.ereg_replace
eregi_replace
    ereg_replace(pattern,string replacement,string)
    eregi_replace(pattern,string replacement,string)
    string
字串中满足pattern的文本将被替换成replacement。如果string中有pattern匹配的文本,那么返回替换之后的值,如果没有,则返回原来的string值。
    
如果pattern中包含子模式,子模式可以有选择的被保留而不被替换。
    
1pattern中的第二个子模式不被替换,replacement可写成这样:replacement\\2。这样string中匹配的pattern的字符串将被替换为replacement+pattern2pattern2表示匹配pattern的文本中又匹配pattern的第二个子模式的文本。如果使用"\\0"表示保留整个匹配文本。利用这个特性可以实现在特定的字符串之后插入文本的操作。
    replacement
必须是字符串类型变量,如果不是,替换时将强制转换成字符串类型。
3.split()
函数和spliti()函数用法
    split(pattern,string,[int limit]);
    spliti(pattern,string,[int limit]);
    split
以正则表达式pattern定义的模式为分隔符将string分隔成几个部分。如果分隔成功,返回的值为各个分隔后部分组成的数组,失败则返回false。可选limit表示最大分割块数。如果limit5,那么即使string>5个的地方符合patternstring也只被分割为5个部分,最后一个部分是string去掉前四个部分后剩下的部分。返回值中也只有5个元素。
.perl风格正则表达式及相关函数
1.perl
正则语法
    perl
分隔符,可使用"/","!""{}"
    
1/^[^0-9]/     !^[0-9]!    {^[0-9]}三个都一样。
    
在分隔符内部,分隔字符本身就是一个特殊敏感字符,要进行转义。如果用分隔符"/",正则中又用了表达字符的"/",则必须要用"\/"。如果混合用"/""!"就没问题。
    
2/\/\/$/    !//$! 两者也相同
    
3!^\!\![0-9]$!    /^!![0-9]$/ 两者也相同
2.perl
特殊意义字符
    \a ASCII
值为7的告警符
    \b 
词的边界
    \A 
和脱出符号("/")等价
    \B 
非词边界
    \cn 
控制字符
    \d 
单个数字
    \D 
单个非数字
    \s 
单个空白
    \S 
单个非空白
    \w 
单个的字母或下划线
    \W 
单个的非词字符(不是字母也不是下划线)
    \Z 
从目标字串的尾部开始匹配
3.
高级特性
    1)
或运算"|"
        
例如!^ex|em!匹配条件是exem开头的字符串,还可以写成!^e(x|m)!
        
注意:()内的内容代表子模式\
    2)
逻辑符号后面的模式选项
        !
正则表达式!逻辑选项
        A
:只匹配位于目标字串开头的字符。
        E
:该选项使转义字符$构成的正则表达式只匹配目标字符串的结尾字符。如果选择m选项,该选项就被忽略。
        U
:该选项禁止最大长度的搜索。一般情况下,搜索会尽量找最长的匹配字符串。例如模式/a+/"caaaaab"字符串中的匹配结果是"aaaaa",但是使用该选项的模式/a+/U匹配的结果会是"a"
        S
:对模式进行学习,提高查找速度。
        i
:该选项忽略大小写。
        m
:该选项将含有换行符的字符串视为多行而不是一行。这个时候"$""^"等字符会匹配每个换行符。
        s:
该选项使句点"."也匹配换行符。
        x:
该选项通知PHP解释器在分析的时候忽略正则表达式定义中的非转义空格符。这样可以在正则表达式中使用空格来增强其可读性,但这时在表达式中使用空格符必须使用转义字符。
    3)
扩展模式符号。
        (?#comment)    
添加注释comment,可以增强正则可读性。
        (?=pattern)    
指定在模式之后必须跟随值pattern
        (?!pattern)    
指定在模式之后不能跟随值pattern
        (?n)           
在模式内部而非结尾处定义模式选项n
        (?: )           
消耗字符,不捕获匹配结果。
        
:echo ereg("?:^a$","a");//无任何输出。

4.per正则函数
    1.preg_grep
函数
        preg_grep(pattern,array input);
        
输入数组input中寻找匹配模式pattern的字串,并将所有的匹配字符串返回。返回值就是所有匹配的字符串组成的数组。
    2.preg_match
函数
        preg_match(pattern,string subject,[array matches])
        
该函数在subject字符串中寻找匹配pattern的字符串。如果找到则返回一个非零值,否则返回零值。如果选用了可选项matches,那么匹配的字符串将被放到第一个元素的位置,可以用$matches[0]来读取,圆括号匹配的结果也按顺序放在这个数组中,第一个是$matches[1],第二个是$matches[2],依次类推。
    3.preg_match_all
函数
        preg_match_all(pattern,subject,array matches,[int order])
        
该函数在subject字符串中寻找匹配pattern的互不重叠的文本,找到了匹配的文本则返回匹配文本的个数,否则返回0。匹配文本被放在二维数组matches中,matches[0]中存放的是所有符合的字符串。各种嵌入的子模式匹配的结果依次放在数组matches[1]~[n]中。
        order
参数可选,可取的值为PREG_PATTERN_ORDERPREG_SET_ORDER
    4.preg_replace
函数
        preg_replace(pattern,replacement,subject,[int limit])
        
该函数将subject中符合pattern模式的部分替换成replacement,返回值类型和subject类型一样,如果有替换,则返回替换后的值,反之则返回原来的值。
        
参数可以是数组也可以是变量,有几种情况:
            
如果subject参数是数组类型。函数对每一个数组元素进行替换操作;
            
如果pattern是数组则函数根据每一个pattern中的类型进行替换;
            
如果patternreplacement都是数组,则按两个数组中的元素对应完成替换;
            
如果replacement中的元素个数少于pattern中的元素个数。那么不够的部分将有空字符串来代替。
    5.preg_split
函数
        preg_split(pattern,subject,[int limit][flages])
        
该函数以pattern定义的模式为分隔符将subject字符串分隔为若干个部分,返回数组,其中存放被分隔后的字符串。limit可限制返回字符串的数目,如果设置为-1表示对返回的字符串数目不加任何限制。flags也是可选项,其有两个值:PREG_SPLIT_NO_EMPTY设定函数不返回空字符串,PERG_SPLIT_DELIM_CAPTURE,该选项设定pattern中的嵌入子模式也会被函数匹配。

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment