首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
cookie
utf-8
cpython
yaml
audio
format
cPlusPlus
instance
header
fetch
php7
command
stream
cmd
merge
bitmap
expression
bytecode
cSharp
config
email
md5
httpclient
testing
javascript
require
uri
netty
get
install
heap
timestamp
httprequest
client
web3
case
emoji
const
vbscript
scala
vba
function
c语言
php8
ascii
go
range
callback
eval
hash
string
replace
golang
solr
blob
byte
random
input
python2
grid
bash
python
chat
frameworks
io
settings
actionscrip
filter
dagger
runtime
metadata
import
iostream
version
join
tree
schema
shell
数组
当前位置:
开发笔记
>
编程语言
> 正文
posix和perl标准的正则表达式区别
作者:蜡笔小昕廖廖 | 来源:互联网 | 2015-12-03 03:29
正则表达式(RegularExpression,缩写为regexp,regex或regxp),又称正规表达式、正规表示式或常规表达式或正规化表示法或正规表示法,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串
正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式、正规表示式或常规表达式或正规化表示法或正规表示法,是
指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串
。在很多文本编辑器或其他工具里,正则表达式
通常被用来检索和/或替换那些符合某个模式的文本内容
。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的在正则表达式引擎。正则表达式这个概念最初是由 Unix中的工具软件(例如sed和grep)普及开的。(摘自维基百科)
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()
定界符:
POSIX兼容正则没有定界符,函数的相应参数会被认为是正则。
PERL兼容正则可以使用任何不是字母、数字或反斜线(/)的字符作为定界符,如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。也可以使用(),{},[] 和 <> 作为定界符
修正符:
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。
逻辑区隔:
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次
逻辑区间与“()”相关:
使用()包含起来的区域是一个逻辑区间,逻辑区间的主要作用是体现出一些字符出现的逻辑次序,另一个用处就是可以用来引用(可以将此区间内的值引用给一个变量)。后一个作用比较奇特:
$str = "http://www.163.com/";
// POSIX兼容正则:
echo ereg_replace("(.+)","
//1
",$str);
// PERL兼容正则:
echo preg_replace("/(.+)/","
$1
",$str);
// 显示两个链接
?>
在引用的时候,括号是可以嵌套的,逻辑次序是按照“(”出现的次序来标定的。
类型匹配:
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=]:功能不明
[:<:]:匹配单词的开始
[:>:]:匹配单词的结尾
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 目标中的第一个匹配位置
编辑器
perl
php
sql
git
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
md5
介绍一个免费的具备数据显示/录入/更新/删除功能的asp.net控件
本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ...
[详细]
蜡笔小新 2023-12-11 09:41:26
md5
Android 新闻App的本地服务器搭建教程
本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ...
[详细]
蜡笔小新 2023-12-14 17:15:19
md5
PHP组合工具以及开发所需的工具
本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ...
[详细]
蜡笔小新 2023-12-09 17:36:44
get
SQL日志收缩及截断方法详解
本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ...
[详细]
蜡笔小新 2023-12-14 18:23:25
get
Thrift教程初级篇——RPC框架Thrift的安装环境变量配置与第一个实例
本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ...
[详细]
蜡笔小新 2023-12-13 17:36:52
get
Java验证码——kaptcha的使用配置及样式
本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ...
[详细]
蜡笔小新 2023-12-13 13:58:25
get
高质量SQL书写的30条建议
本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ...
[详细]
蜡笔小新 2023-12-13 13:24:33
fetch
如何在php中将mysql查询结果赋值给变量
本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ...
[详细]
蜡笔小新 2023-12-12 18:22:57
config
dede删除自定义字段变量的方法
在使用dedecms过程中,添加自定义字段变量很有用,但删除并不容易。本文介绍了两种常用的删除方法:执行SQL语句和手动SQL删除。 ...
[详细]
蜡笔小新 2023-12-12 17:25:58
get
欢乐的票圈重构之旅——RecyclerView的头尾布局增加
项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ...
[详细]
蜡笔小新 2023-12-11 19:09:56
get
腾讯安全平台部招聘安全工程师和数据分析工程师
腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ...
[详细]
蜡笔小新 2023-12-10 17:01:40
uri
云原生应用最佳开发实践之十二原则(12factor)
目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ...
[详细]
蜡笔小新 2023-12-09 09:35:02
get
有关phpfgetss()函数的文章推荐10篇
有关phpfgetss()函数的文章推荐10篇:了解如何使用PHP的各种文件函数。查看诸如fopen、fclose和feof之类的基本文件函数;了解诸如fgets、fgetss和f ...
[详细]
蜡笔小新 2023-10-17 15:45:58
get
为什么设计师创造的编程语言更受欢迎?
导读:在编程的世界里,语言纷繁多样,而大部分真正广泛流行的语言并不是那些学术界的产物,而是在通过自由发挥设计出来的。和那些 ...
[详细]
蜡笔小新 2023-10-17 15:22:41
get
评估连接速度的最佳方法 - Best way to evaluate connection speed
Imdevelopinganappwhichneedstogetmusicfilebystreamingforplayinglive.我正在开发一个应用程序,需要通过流 ...
[详细]
蜡笔小新 2023-10-17 14:49:20
蜡笔小昕廖廖
这个家伙很懒,什么也没留下!
Tags | 热门标签
cookie
utf-8
cpython
yaml
audio
format
cPlusPlus
instance
header
fetch
php7
command
stream
cmd
merge
bitmap
expression
bytecode
cSharp
config
email
md5
httpclient
testing
javascript
require
uri
netty
get
install
RankList | 热门文章
1
win10系统出现“诊断策略服务未运行”怎么办?:win10诊断策略服务未运行
2
网易邮箱服务器怎么注册,免费网易域名邮箱申请教程(图):
3
华为的OD,值得去吗?「建议收藏」
4
从私有git存储库中读取swagger文件时出现WSO2身份验证错误
5
一致性哈希算法的优化关于如何保正在环中增
6
hadoop笔记——YARN部署
7
范数(简单的理解)、范数的用途、什么是范数
8
Mysql——5.7.18安装没有Next按钮
9
C基础一
10
基于LNMP架构搭建Discuz论坛
11
企业信息化整体解决方案
12
群辉 docker 究竟如何使用阿里云私有 docker 仓库?
13
缓存如果使用不当会造成什么后果?
14
【NLP复习】回归和分类问题的评价指标
15
云服务器入网带宽和出网带宽有什么区别?举例说明
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有