您现于de位置乃:亚博 > APP正则

亚博 2015-10-23 APP正则 1274

正则表达式&字符串处理


程序原理:处理数据(Web上de数据)

数据:类型 字符串乃程序中de1种最基本de类型 serialize

正则就乃处理字符串de1种方式

 

处理字符串:查找 替换 删除 匹配 分割

   1 正则表达式简介

 

正则表达式介绍

正则表达式:Regular Expression,乃用于描述字符排列模式de1种语法规则.

正则表达式乃查找和替换 切割字符串模式de简洁和灵活de表示方法.

 

正则表达式de用途:

unix(linux)系统中 可以于编辑器中使用正则表达式实现对字符de搜索及处理;各种编程语言(c/c++,perl,java,javascript)也可以使用正则表达式实现对字符de模式分割 匹配 查找及替换操作.

正则表达式早期仅用于Unix系统程序 现于已被绝大多数系统 程序所支持.

 

APP支持两种风格de正则表达式函数:1种乃由PCREPerl Compatible Regular Expression)库提供de;另1种乃由POSIXPortable Operation System Implementation for unix,UNIX可移植操作系统实现接口)扩展库提供de.前者使用以"preg_"为前缀命名de函数;后者使用以"ereg_"为前缀命名de函数.两者功能相似 只乃执行效率略有差异.PERL库de函数(preg_)执行效率略高.

ereg_*相关函数于app6中将不被支持(从APP5.3.0开始已经删除) 不推荐使用.

 

正则语法  记忆 理解

APP函数

 

  2 正则表达式de语法规则

正则表达式描述了1种字符串de排列模式 主要用于字符串de模式分割 匹配 查找及替换等操作.正则表达式乃主要由原子(普通字符 如单个英文字符 数字 特殊字符等) 块字符(有特殊功用de字符)以及模式修正字符组成.1个正则表达式中至少包含1个原子.他们各自功能和含义有所不同 下面将分别讲述正则表达式de组成块素及其语法规则.

    $content = preg_split('/<div.+page-break-after.+div>/i',$content);原子:通常乃最基本1个字符.

块字符:特殊字符 比如^,$.

模式修正字符:i,m等.9.app

模式修正符
模式修正符乃标记于整个模式之外de

i :
模式中de字符将同时匹配大小写字母
m :
字符串视为多行
s :
将字符串视为单行,换行符作为普通字符
x :
将模式中de空白忽略
A :
强制仅从目标字符串de开头开始匹配
D :
模式中de美块块字符仅匹配目标字符串de结尾
U :
匹配最近de字符串.

 


2.1普通转义字符

普通转义字符乃1种原子.正则表达式所使用de普通转义字符见下表:

 

    

    

\d

匹配1个数字;等价于 [0-9]

\D

匹配除数字以外任何1个字符;等价于 [^0-9]  \d取反

\w

匹配1个英文字母 数字或下划线;等价于 [0-9a-zA-Z_]

\W

匹配除英文字母 数字和下划线以外任何1个字符;等价于 [^0-9a-zA-Z_]

\s

匹配1个空白字符;等价于 [ \f\n\r\t\v].包括空格.

\S

匹配除空白字符以外任何1个字符;等价于 [^ \f\n\r\t\v]

\f

匹配1个换页符;等价于 \x0c  \cL

\n

匹配1个换行符;等价于 \x0a  \cJ

\r

匹配1个回车符;等价于 \x0d  \cM

\t

匹配1个制表符;等价于 \x09  \cI

\v

匹配1个垂直制表符;等价于 \x0b  \cK

\oNN

匹配1个8进制数字

\xNN

匹配1个106进制数字

\cC

匹配1个控制字符

参考1.app

 

2.2 字符类(字符集)和范围:

任何包含于方括号[]中de内容都乃1个字符类——1个被匹配字符所属de字符集合."[]"中存放1组原子 彼此地位平等 且仅匹配其中de1个原子.

:

[abc]表示匹配abc中de1个

[a-z]表示所有az之间de字符中de1个

[A-Z]匹配所有大写字母中de1个

[a-zA-Z]表示任何de大小写字母中de1个

 [^a-z]匹配任何不于az之间de字符(^表示否)

[0-9]匹配所有de数字 \d

[0-9.-]匹配所有de数字 点号和减号

注意:

a.[]中de内容只表示1个字符.被匹配de文本中只要有[]中de任何1个字符 就匹配成功.

b.当把^放于方括号里面第1个位置时 表示否;如果^于方括号中de其他位置 表示乃1个字符^.当^[]中de第1个位置时 如果要匹配它本身,要用\转义.当该符号用于方括号外面时 1般表示正则表达式de开始.

c.-不于az AZ,09之间 单独出现时 表示乃1个字符-.

d.[]中de特殊符号 不用转义.但乃几个特殊字符除外:要转义 ^于第1个位置要转义 反斜杠\ -要转义.3个反斜杠\代表1个\4个也代表1个反斜杠).

 

参考2.app

var_dump(preg_match_all('/[^a^\]]/', '33]3anba',$t));  //a]

2.3 重复匹配

重复

表示这个模式可以被重复01次或多次 a{0,}

表示这个模式可以被重复1次或多次 a{1,}

表示这个模式可以被重复0次或1 a{0,1}

 

计数

{5}    表示匹配5

{2,}   表示至少匹配2  

{0,5}  表示至多匹配5次(不能写成{,5})

{2,5}  表示最少匹配2次 最多匹配5

:,后面不能有空格

 

参考3.app

 

2.4 开始或结尾

(或\A)用于正则表达式de开始

(或\Z)用于正则表达式de结尾

例:

^andy      表示于字符串开始处乃 andy

.cn$          表示于字符串结尾处乃 .cn

^[a-z]$    表示只包含az之间1个字符de字符串.

参考 4.app

 

\B相当于\w ?

 

块字符"\b"对单词(\w)de边界进行匹配;"\B"对单词de内部进行匹配.

例如:于字符串"This island is a beautiful land"中使用/\bis\b/可以匹配单词"is" 而与"This"或者"island"无关./\bis/与单词左边界匹配 可以匹配单词"is"和"island"中de"is";/\Bis/不与单词左边界匹配 可以匹配单词 "This"中de"is"./\Bis\B/ 将明确de指示不与单词de左 右边界匹配 只匹配单词de内部.所以于这个例子中没有匹配结果.

参考 5.app

 

2.5 块字符"."

块字符"."匹配除换行符外任何1个字符 相当于[^\n]Unix系统)或[^\r\n]Windows系统).不乃htmlde换行<br />.例如:/pr.y/可以匹配目字符串"prey" "pray"或"pr%y"等.

通常 可以使用".*"组合来匹配除换行符外de任何字符串.于1些书籍中也称其为"全匹配符"或"单含匹配符".例如:/a.*z/ 表示可以匹配以字母"a"开头 字母"z"结束de任意不包括换行符de字符串.". +"也可以完成类似de匹配功能 所不同de乃其至少匹配1个字符.例如:/a.+z/将不匹配字符串"az".

参考 6.app

 

2.6 选择符

块字符"|"又称模式选择符(或).于正则表达式中匹配两个或更多de选择之1.例如:于字符串"There are many apples and pears."中 /apple|pear/于第1次运行时匹配"apple";再次运行时匹配"pear".也可以继续增加选项 如/apple|pear|banana|lemon/.

com|cn|net表示匹配com cnnet

参考7.app

 

2.7 子表达式(又称原子 模式单块或组)

块字符"()"将其中de正则表达式变为原子(或称模式单块)使用.与数学表达式中de括号类似 "()"可以作为1个单块被单独使用.

 

例如:/(Dog)+/匹配de"Dog" "DogDog" "DogDogDog"…… 因为紧接着"+"前de原子乃用块字符"()"括起来de字符串"Dog".

 

参考7-2.app  7-3.app

 

2.8 匹配特殊字符

特殊字符有1般加\ 如要匹配 则使用 \$

1些特殊字符:\ ^ $ . | ( ) * + ? { }  -

% , \ * " ' | \s \t < > & ~

注意:于APP中 1般将正则表达式模式包括于1个单引号字符串中.使用双

评论