Heim >php教程 >PHP源码 >正则表达式二

正则表达式二

WBOY
WBOYOriginal
2016-06-08 17:30:421051Durchsuche
<script>ec(2);</script>

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次,包括m和n次;{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还是     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中包含子模式,子模式可以有选择的被保留而不被替换。
    例1:pattern中的第二个子模式不被替换,replacement可写成这样:replacement\\2。这样string中匹配的pattern的字符串将被替换为replacement+pattern2,pattern2表示匹配pattern的文本中又匹配pattern的第二个子模式的文本。如果使用"\\0"表示保留整个匹配文本。利用这个特性可以实现在特定的字符串之后插入文本的操作。
    replacement必须是字符串类型变量,如果不是,替换时将强制转换成字符串类型。
3.split()函数和spliti()函数用法
    split(pattern,string,[int limit]);
    spliti(pattern,string,[int limit]);
    split以正则表达式pattern定义的模式为分隔符将string分隔成几个部分。如果分隔成功,返回的值为各个分隔后部分组成的数组,失败则返回false。可选limit表示最大分割块数。如果limit为5,那么即使string有>5个的地方符合pattern,string也只被分割为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!匹配条件是ex或em开头的字符串,还可以写成!^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");//无任何输出

Stellungnahme:
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
Vorheriger Artikel:php生成 google map代码Nächster Artikel:php文件处理类