爱程序网

Php中正则小结(一)

来源: 阅读:

一.概念

语法模式类似perl.表达式必须用分隔符闭合,比如一个正斜杠(/).

分隔符可以是任意非字母非数字,除反斜杠()和空字节之外的非空白ascii字符

 

 

如果分隔符 在表达式中使用,需要使用反斜线进行转义

 

二.组成

元字符

一个正则表达式基本组成

 

/原子和元字符/模式修正符              /代表定界符的一个

正则表达式的威力在于其能够在模式中包含选择和循环。它们通过使用元字符来编码在模式中,元字符不代表其自身,它们用一些特殊的方式来解析。

根据在方括号的内部还是外部分为两种。

 1.方括号之外的元字符

元字符(符号)

说明

一般用于转义字符

^

断言目标的开始位置(或在多行模式下是行首)

$

目标的结束位置(活在多行模式下行尾)

.

匹配除换行符外任何字符(默认时)

[,]

开始,结束字符类定义

|

开始一个可选分支

( ,)

子组的开始,结尾标记

?

作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性

*

量词,0 次或多次匹配

 

+

量词,1 次或多次匹配

 

{ ,}

自定义量词开始标记,结束标记

 

 

2.模式中方括号内的部分称为“字符类”

元字符

说明

转义字符

^

仅在作为第一个字符时,表明字符类取反

-

标记字符范围

元字符用法说明举例

1.转义(反斜线)

后紧跟着一个非字母数字字符,则取消该字符可能具有的任何特殊含义。此种适用于字符类之中或之外。

对于非数字字母的字符,总是需要其进行原文匹配时候在它前面加一个反斜线,来代表它代表自己。

 

匹配 “*” 时,由于其有特殊含义,所以用 “*”取消掉了其特殊含义

匹配”.”用”.”

匹配”” 用”\”

但要注意:

反斜线在单引号字符串和双引号字符串中都有特殊含义,因此要匹配一个反斜线,模式中必须写”\\”或’\’

 

2.反斜线第二种用途提供了一种对非打印字符进行可见编码的控制手段。除了二进制的0会终结一个模式外,并不会严格的限制非打印字符(自身)的出现,但是当一个模式以文本编辑器的方式编辑准备的时候,使用下面的转义序列相比比使用二进制字符会更容易。

 

符号

说明

a

 

响铃字符(十六进制 07)

 

cx

"control-x",x 是任意字符

 

e

转义 (十六进制 1B)

 

f

换页 (十六进制 0C)

 

n

换行 (十六进制 0A)

 

p{xx} (p小写)

一个符合 xx 属性的字符

P{xx} (p大写)

一个不符合 xx 属性的字符

r

回车 (十六进制 0D)

 

t

水平制表符 (十六进制 09)

 

xhh

  hh十六进制编码的字符

ddd

ddd八进制编码的字符,或者后向引用

 

40

空格的另外一种用法

 

40

当提供了少于40个子组时也认为是空格。 

 

7

始终是后向引用

 

11

可能是后向引用,也可能是制表符

11

总是一个制表符

 

113

一个制表符紧跟着一个3(因为每次最多只读取3个8进制位

 

113

八进制113代表的字符 

 

377

8进制377是10进制255, 因此代表一个全1的字符

 

81

一个后向引用或者一个二进制 0 紧跟着两个数字 8 和 1(因为8不是8进制有效数字) 

 

3.反斜线第三种用法,描述特定的字符类

符号

说明

d

任意十进制数字

D

任意非十进制数字

h

任意水平空白字符(php 5.2.4)

H

任意非水平空白字符(php 5.2.4)

s

任意空白字符

S

任意空白字符

v

任意垂直空白字符(since PHP 5.2.4)

 

V

任意非垂直空白字符(since PHP 5.2.4)

 

w

任意单词字符

 

W

任意非单词字符

 

上面每一对转义序列都代表了完整字符集中两个不相交的部分, 任意字符一定会匹配其中一个,同时一定不会匹配另外一个。

 

第四种用法 简单的断言

b

单词边界 注意在字符类中是退格

 

B

非单词边界

 

A

目标的开始位置(独立于多行模式)

 

Z

目标的结束位置或结束处的换行符(独立于多行模式) 

 

z

目标的结束位置(独立于多行模式)

 

G

在目标中首次匹配位置

 

A,Z,z断言不同于传统的^$

 

因为他们永远匹配目标字符串的开始和结尾,而不会受模式修饰符的限制

 

Z和 z之间的不同在于当字符串结束字符时换行符时 Z 会将其看做字符串结尾匹配, 而 z 只匹配字符串结尾。

 

代码1

$p='#A[a-z]{3}#m';$str='abcdefghijkl';preg_match_all($p,$str,$all);print_r($all);

相关文章列表: