澳门新浦京8455com正则表达式二

在PHP中正则表达式用于复杂字符串的处理。所支持的正则表达式如下:

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还是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中包含子模式,子模式可以有选择的被保留而不被替换。
例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);//无任何输出

ereg()

ereg_replace()

eregi()

eregi_replace()

split()

(1)ereg,eregi

这是正规表达式匹配函数,前者是大小写有关匹配,后者则是无关的.

用法:

ereg(正规表达式,字符串,[匹配部分数组名]);

PHP3.0中的正规表达式大体类似于grep中用的.

(2)ereg_replace,eregi_replace

这些是替换函数.

用法:

ereg_replace(正规表达式,替换串,原字符串);

字符串处理函数中有一个strtr,是翻译函数,类似于Perl中的tr/…/…/,

用法:

strtr(字符串,从,到);

例如:

strtr(aaabb,ab,cd)返回cccdd.

(3)split

与explode函数有些类似,但这次可以在匹配某正规表达式的地方分割字符串.

用法:

split(正规表达式,字符串,[取出前多少项]);

这些函数都使用正则字符串做为第一个参数。PHP使用Posix
1003.2标准所定义的扩展正则字符串。

要查考Posix正则表达式的完整描述请看PHP软件包中regex目录下的man页。

Regular expression examples:

ereg(abc,$string);

/* Returns true if abc is found anywhere in $string. */

ereg(^abc,$string);

/* Returns true if abc is found at the beginning of $string. */

ereg(abc$,$string);

/* Returns true if abc is found at the end of $string. */

eregi((ozilla.[23]|MSIE.3),$HTTP_USER_AGENT);

/* Returns true if client browser is Netscape 2, 3 or MSIE 3. */

ereg(([[:alnum:]]+) ([[:alnum:]]+)
([[:alnum:]]+),$string,$regs);

/* Places three space separated words into $regs[1], $regs[2] and
$regs[3]. */

ereg_replace(^,,$string);

/* Put a tag at the beginning of $string. */

ereg_replace($,,$string);

/* Put a tag at the end of $string. */

ereg_replace( ,,$string);

/* Get rid of any carriage return characters in $string. */

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图