1、正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式、正规表示式或常规表达式或正规化表示法或正规表示法,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串 。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容 。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的在正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。

2、PHP同时使用两套正则表达式规则,一套是由电气和电子工程师协会(IEEE)制定的POSIX Extended 1003.2兼容正则(事实上PHP对此标准的支持并不完善),另一套来自PCRE(Perl Compatible Regular Expression)库提供PERL兼容正则,这是个开放源代码的软件,作者为Philip Hazel。

使用POSIX兼容规则的函数有:

ereg_replace()

ereg()

eregi()

eregi_replace()

split()

spliti()

sql_regcase()

mb_ereg_match()

mb_ereg_replace()

mb_ereg_search_getpos()

mb_ereg_search_getregs()

mb_ereg_search_init()

mb_ereg_search_pos()

mb_ereg_search_regs()

mb_ereg_search_setpos()

mb_ereg_search()

mb_ereg()

mb_eregi_replace()

mb_eregi()

mb_regex_encoding()

mb_regex_set_options()

mb_split()

使用PERL兼容规则的函数有:

preg_grep()

preg_replace_callback()

preg_match_all()

preg_match()

preg_quote()

preg_split()

preg_replace()

3、定界符:

POSIX兼容正则没有定界符,函数的相应参数会被认为是正则。

PERL兼容正则可以使用任何不是字母、数字或反斜线(\)的字符作为定界符,如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。也可以使用(),{},[]和 <>作为定界符。

4、修正符:

POSIX兼容正则没有修正符。

PERL兼容正则中可能使用的修正符(修正符中的空格和换行被忽略,其它字符会导致错误):

i (PCRE_CASELESS):

匹配时忽略大小写。

m(PCRE_MULTILINE):

当设定了此修正符,行起始(^)和行结束($)除了匹配整个字符串开头和结束外,还分别匹配其中的换行符(\n)的之后和之前。

s(PCRE_DOTALL):

如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。

x(PCRE_EXTENDED):

如果设定了此修正符,模式中的空白字符除了被转义的或在字符类中的以外完全被忽略。

e:

如果设定了此修正符,preg_replace()在替换字符串中对逆向引用作正常的替换,将其作为 PHP代码求值,并用其结果来替换所搜索的字符串。 只有 preg_replace()使用此修正符,其它 PCRE函数将忽略之。

A(PCRE_ANCHORED):

如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配。

D(PCRE_DOLLAR_ENDONLY):

如果设定了此修正符,模式中的行结束($)仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,也会被匹配在里面。如果设定了m 修正符则忽略此选项。

S:

当一个模式将被使用若干次时,为加速匹配,值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前,分析一个模式仅对没有单一固定起始字符的 non-anchored模式有用。

U(PCRE_UNGREEDY):

使“?”的默认匹配成为贪婪状态的。

X(PCRE_EXTRA):

模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误,从而保留此组合以备将来扩充。默认情况下,一个反斜线后面跟一个没有特殊意义的字母被当成该字母本身。

u(PCRE_UTF8):

模式字符串被当成UTF-8。

5、逻辑区隔:

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]。

匹配次数与“{}”相关:

POSIX兼容正则和PERL兼容正则在匹配次数方面完全一致:

{2}:表示匹配前面的字符2次

{2,}:表示匹配前面的字符2次或多次,默认都是贪婪(尽可能多)的匹配

{2,4}:表示匹配前面的字符2次或4次

逻辑区间与“()”相关:

使用()包含起来的区域是一个逻辑区间,逻辑区间的主要作用是体现出一些字符出现的逻辑次序,另一个用处就是可以用来引用(可以将此区间内的值引用给一个变量)。后一个作用比较奇特:

  1. <?php
  2. $str = "http://www.163.com/";
  3. // POSIX兼容正则:
  4. echo ereg_replace("(.+)","<a href = \\1 >\\1</a>",$str);
  5. // PERL兼容正则:
  6. echo preg_replace("/(.+)/","<a href = $1 >$1</a>",$str);
  7. // 显示两个链接
  8. ?>

在引用的时候,括号是可以嵌套的,逻辑次序是按照“(”出现的次序来标定的。

6、类型匹配:

POSIX兼容正则:

[:upper:]:匹配所有的大写字母

[:lower:]:匹配所有的小写字母

[:alpha:]:匹配所有的字母

[:alnum:]:匹配所有的字母和数字

[:digit:]:匹配所有的数字

[:xdigit:]:匹配所有的十六进制字符,等价于[0-9A-Fa-f]

[:punct:]:匹配所有的标点符号,等价于[.,"'?!;:]

[:blank:]:匹配空格和TAB,等价于[ \t]

[:space:]:匹配所有的空白字符,等价于[ \t\n\r\f\v]

[:cntrl:]:匹配所有ASCII 0到31之间的控制符。

[:graph:]:匹配所有的可打印字符,等价于:[^ \t\n\r\f\v]

[:print:]:匹配所有的可打印字符和空格,等价于:[^\t\n\r\f\v]

[.c.]:功能不明

[=c=]:功能不明

[:<:]:匹配单词的开始

[:>:]:匹配单词的结尾

7、PERL兼容正则(这里可以看出PERL正则的强大):

\a alarm,即 BEL字符(’0)

\cx "control-x",其中 x 是任意字符

\e escape(’0B)

\f 换页符 formfeed(’0C)

\n 换行符 newline(’0A)

\r 回车符 carriage return(’0D)

\t 制表符 tab(’0)

\xhh 十六进制代码为 hh 的字符

\ddd 八进制代码为 ddd的字符,或 backreference

\d 任一十进制数字

\D 任一非十进制数的字符

\s 任一空白字符

\S 任一非空白字符

\w 任一数字、字母或下划线的字符

\W 任一非数字、字母或下划线的字符

\b 字分界线

\B 非字分界线

\A 目标的开头(独立于多行模式)

\Z 目标的结尾或位于结尾的换行符前(独立于多行模式)

\z 目标的结尾(独立于多行模式)

\G 目标中的第一个匹配位置

posix,perl正则表达式区别的更多相关文章

  1. 解析posix与perl标准的正则表达式区别

    解析posix与perl标准的正则表达式区别 作者: 字体:[增加 减小] 类型:转载 本篇文章是对posix与perl标准的正则表达式区别进行了详细的分析介绍,需要的朋友参考下 正则表达式(Regu ...

  2. PHP扩展模块Pecl、Pear以及Perl的区别

    一.简短总结:pear:一个书写的比较规范,国外较流行的工具箱代码集pecl:php扩展包,但不属于php基本扩展范围perl:一种早于php出现的脚本级语言,php借鉴了他的正则表达式部分 二.Pe ...

  3. Perl 正则表达式语法

    1. 概要 Perl正则表达式是Boost.regex 默认行为,也可以将perl传入basic_regex 构造. boost::regex  e1(my_expression); boost::r ...

  4. Perl正则表达式例子

    Perl正则表达式 一.介绍 正则表达式各语言都有自己的规范,但是基本都差不多,都是由元字符的组合来进行匹配:由于Nmap内嵌的服务与版本探测是使用的Perl正则规范,因此此篇博客记录一下Perl正则 ...

  5. Perl正则表达式

    perl正则表达式就是通过一串特别设计的字符串,可以按照我们的需求匹配.替换.转化目标字符串.本文主要是对一些常用的正则表达以及语法的总结以及举例,供广大喜爱Perl的同学交流学习. 操作符: =~ ...

  6. 解析posix与perl标准的正则表达式区别 ---PHP

        正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式.正规表示式或常规表达式或正规化表示法或正规表示法,是指一个用 来描述或者匹配一系 ...

  7. perl正则表达式第三周笔记

    正则引擎的分类 正则引擎的分类 正则引擎的分类主要分两种: DFA:egrep.awk.lex.flex NFA:.NET.PHP.Perl.Ruby.Python.GNU Emacs.ed.sec. ...

  8. perl正则表达式第二周笔记

    1.使用正则表达式修改文本 1.使用正则表达式修改文本 正则表达式的功能不只有查询,还可以对文本进行修改,例如替换 $var=~m/regex/i $var=~s/regex/replacement/ ...

  9. Perl正则表达式超详细教程

    前言 想必学习perl的人,对基础正则表达式都已经熟悉,所以学习perl正则会很轻松.这里我不打算解释基础正则的内容,而是直接介绍基础正则中不具备的但perl支持的功能.关于基础正则表达式的内容,可参 ...

随机推荐

  1. Rest api简介

    理解和使用内容协商 我们的开发者在发送一个 REST API 请求的同时,根据应用场景,针对相同的资源,可能会期待不同的返回形式. 比如,我希望根据用户客户端语言,同一个资源的内容可以返回不同的语言. ...

  2. Android 之dragger使用

    1.依赖的注入和配置独立于组件之外,注入的对象在一个独立.不耦合的地方初始化,这样在改变注入对象时,我们只需要修改对象的实现方法,而不用大改代码库. 2.依赖可以注入到一个组件中:我们可以注入这些依赖 ...

  3. Socket层实现系列 — listen()的实现

    本文主要分析listen()的内核实现,包括它的系统调用.Socket层实现.半连接队列,以及监听哈希表. 内核版本:3.6 Author:zhangskd @ csdn blog 应用层 int l ...

  4. javascript语言扩展:可迭代对象(1)

    在ECMAScript中我们知道可以通过for in语句进行对象属性的遍历,当然这些属性不包括继承而来的属性: var ary = [1,2,3,"aa",4]; for(i in ...

  5. oo修仙之路

    写在前面: 之前听说过oo这门课的威力,计院全体修仙现场的图也被转了不知多少遍,然而自己不亲身经历就不知这门课的难度所在.每次debug时耳边总会想起三国杀里面周瑜的话"挣扎吧,在血和暗的深 ...

  6. React Native Android开发环境配置

    近些年,Web前端甚是火爆,火爆程度堪比我毕业时的移动端开发一般.随着JavaScript的火爆,移动端也不安分了起来,ReactNative就异军突起了,几乎要做到"一次学习,四处开发&q ...

  7. MOOS通配符订阅

    MOOS通配符订阅 简介 通配符订阅是MOOSV10的重要进步,客户端可以通过此方式订阅名字和来源符合简单正则表达式的数据. 现在仅支持"*"和"?"两种通配符 ...

  8. 网站SEO优化问答精选

    1.百度每更新一次,网站的收录就减少很多,但是我每天都增加伪原创的内容啊? 这个问题大多数是因为网站权重导致百度不够重视你:另外就是文章质量度不高,没有可读性或是原创度太低,尽管百度会收录,但是经过一 ...

  9. Day7 面向对象和类的介绍

    面向对象讲解: ''' 面向过程: 核心是过程二字,过程指的是问题的解决步骤,基于过程去设计程序,就好比在设计一条流水线,是一种机械式的思维方式. 优点:复杂的问题流程化,进而简单化 缺点:可扩展性差 ...

  10. jsoup 使用总结2--高级用法之 :gt(n)

    jsoup 使用总结2--高级用法之 :gt(n) 大部分时候,我们使用jsoup解析网页的时候,都是直接找到某一类元素,或者按某种selector查询:具体使用方法可以参考jsoup官网文档 部分h ...