正则表达式

详细解释:http://see.xidian.edu.cn/cpp/html/1432.html

pcre正则匹配ip地址:http://yazku.blog.163.com/blog/static/12355625520100185272922/


1. 自PHP 5.3.0起, POSIX 正则表达式扩展被废弃。在 POSIX 正则和 PCRE 正则之间有一些不同,本页列出了在转向PCRE 时最显著的需要知道的不同点。

  1. PCRE 函数需要模式以分隔符闭合。
  2. 不像POSIX,PCRE 扩展没有专门用于大小写不敏感匹配的函数。取而代之的是,支持使用i (PCRE_CASELESS模式修饰符完成同样的工作。 其他模式修饰符同样可用于改变匹配策略。
  3. POSIX 函数从最左面开始寻找最长的匹配,但是 PCRE 在第一个合法匹配后停止。如果字符串 不匹配这没有什么区别,但是如果匹配,两者在结果和速度上都会有差别。 为了说明这个不同, 考虑下面的例子(来自Jeffrey Friedl 的《精通正则表达式》一书)。 使用模式 one(self)?(selfsufficient)? 在字符串oneselfsufficient 上匹配,PCRE 会匹配到oneself,但是使用 POSIX,结果将是整个字符串 oneselfsufficient。 两个子串都匹配原始字符串,但是 POSIX 将 最长的最为结果。

函数对照表
POSIXPCRE
ereg_replace()preg_replace()
ereg()preg_match()
eregi_replace()preg_replace()
eregi()preg_match()
split()preg_split()
spliti()preg_split()
sql_regcase()无对等函数
posix正则表达式:
1.
^和$定位符指定字符串的开始和结束
^one:表示只匹配那些以one开头的字符串
$two: 表示只匹配那些以one结尾的字符串
字符^和$同时使用表示精确匹配
例如:^three$:表示只匹配字符串three
一个模式不包含^和$那么他可以与任何包含该模式的字符串匹配
^一旦加上方括号[]表示取非得匹配
posix量词:
*:匹配前面的表达式零次或者多次。如zo* 能匹配“z”以及“zoo” ,*等价于{0,}
+:匹配前面的字表达式一次或者多次。如‘zo+’能匹配“zo”以及“zoo”,但是不能匹配“z”。+等价于{1,}
?:匹配前面的子表达式零次或者一次,如“do(es)” 可以匹配“does”中的“do”,?等价于{0,1}
{n}:n是一个非负整数,匹配确定的n次,如“o{2}"不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o
{n,}:n是一个非负整数。至少能匹配n次
{n,m}:m和n都是非负整数其中n<=m。最少匹配n次最多匹配m次,如“o{1,3}"将匹配“foooood”中的前三个o。
‘o{0,1}等价于“0?” 请注意在逗号和两个数之间不能有空格
当在一组方括号内部使用^时,表示“非”,或者“排除”的意思,常常用来剔除某个字符
例子:
[^a-z]:除了小写字母以外的所有字符
[^\\\/\^]:表示除了(\)(/)(^)之外所有的字符



pcre正则表达式:
由于pcre语法支持更短的字符类和更多的特性因此比posix语法更加强大
1.pcre匹配
pcre函数要求表达式以分隔符开始和结束
在大多数的pcre实例中分隔符都用一个/ 可在引号内的表达式开始和结尾处看到。牢记,此分隔符并非表达式的一部分
在pcre表达式中的最后一个分隔符/后可添加一个修饰符来更改正则表达式的行为
如:
I :大小写不敏感的匹配
M:将一个字符串视为多行。视^定位符匹配换行符(\n)之后的内容,$定位符匹配换行符(\n)之前的内容
S:使小圆点(.)匹配任何字符,包括换行符(\n)
X:从模式中删除空白符和注释

prce元字符说明:
\A:只匹配字符串开头
\b:匹配单词的边界
\B:匹配除单启界之外的任意字符
\d:匹配数字字符,与方括号表达式[0-9]相同
\D:匹配非数字字符
\s:匹配空白字符
\S:匹配非空白字符
[]:方括号表达式
[a-z]:匹配所有的小写字母
[A-Z]:匹配所有的大写字母
[a-zA-Z]:匹配所有的大小写字母
[0-9]:匹配所有的数字
[0-9\.\-]:匹配所有的数字,句号和减号
[\f\r\t\n]:匹配所有的白字符
():包围一个字符分组或者一个反向的引用
^:匹配行首
$:匹配行尾
.  :匹配换行之外的任何字符
\ :引出下一个元字符
\w:匹配任何一个只包含下划线以及字符数字的字符串,与方括号表达式[a-zA-Z0-9]相同
\W:和上面的相反,匹配没有下划线以及字符数字的字符串
2.pcre正则表达式函数
(1)preg_match()函数
(2)preg_match_all()函数
(3)preg_quote()函数
(4)preg_split()函数
(5)preg_grep()函数
(6)preg_replace()函数
3.正则表达式vs函数
————————————————————
POSIX兼容正则和PERL兼容正则的逻辑区隔符号作用和使用方法完全一致:
[]:包含任选一操作的相关信息。
{}:包含匹配次数的相关信息。
():包含一个逻辑区间的相关信息,可被用来进行引用操作。
|:表示“或”,[ab]和a|b是等价的。
元字符与“[]”相关:

有两组不同的元字符:一种是模式中除了方括号内都能被识别的,还有一种是在方括号“[]”内被识别的。

POSIX兼容正则和PERL兼容正则“[]之外”“一致”的元字符:
\ 有数种用途的通用转义符
^ 匹配字符串的开头
$ 匹配字符串的结尾
? 匹配0或者1
* 匹配 0 个或多个前面指定类型的字符
+ 匹配 1 个或多个前面指定类型的字符

POSIX兼容正则和PERL兼容正则“[]之外”“不一致”的元字符:
. PERL兼容正则匹配除了换行符外的任意一个字符
. POSIX兼容正则匹配任意一个字符

POSIX兼容正则和PERL兼容正则“[]之内”“一致”的元字符:
\ 有数种用途的通用转义符
^ 取反字符,但仅当其为第一个字符时有效
- 指定字符ASCII范围,仔细研究ASCII码,你会发现[W-c]等价于[WXYZ\\^_`abc]

POSIX兼容正则和PERL兼容正则“[]之内”“不一致”的元字符:
- POSIX兼容正则中[a-c-e]的指定会抛出错误。
- PERL兼容正则中[a-c-e]的指定等价于[a-e]




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值