posix,perl正则表达式区别

小编 2026-07-09 阅读:1163 评论:0
 1、正则表达式(Regular Expression,缩写为regexp,regex或regx...

 

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):

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

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次

 

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

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

 

[php] view plain copy
 
  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,等价于[ ]

[:space:]:匹配所有的空白字符,等价于[ fv]

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

[:graph:]:匹配所有的可打印字符,等价于:[^ fv]

[:print:]:匹配所有的可打印字符和空格,等价于:[^ fv]

[.c.]:功能不明

[=c=]:功能不明

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

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

 

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

a alarm,即 BEL字符(’0)

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

e escape(’0B)

f 换页符 formfeed(’0C)

 换行符 newline(’0A)

 回车符 carriage return(’0D)

 制表符 tab(’0)

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

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

d 任一十进制数字

D 任一非十进制数的字符

s 任一空白字符

S 任一非空白字符

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

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

 字分界线

B 非字分界线

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

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

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

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

 

谋胆并重
版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表