首页 后端开发 php教程 解析posix与perl标准的正则表达式区别_PHP教程

解析posix与perl标准的正则表达式区别_PHP教程

Jul 21, 2016 pm 03:05 PM
perl posix 区别 标准 正则 缩写 表达式 解析

正则表达式(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 目标中的第一个匹配位置

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/327658.htmlTechArticle正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式、正规表示式或常规表达式或正规化表示法或正规表示法,是指一...
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

deepseek r1版本和v3版本有什么区别 deepseek r1版本和v3版本有什么区别 Feb 19, 2025 pm 03:24 PM

DeepSeek:R1与V3版本深度对比,助您选择最佳AI助手!DeepSeek已拥有千万用户,其AI对话功能备受好评。但面对R1和V3两个版本,您是否感到困惑?本文将详细解读两者的差异,帮助您选择最合适的版本。DeepSeekR1与V3版本核心区别:特性R1版本V3版本设计目标专注复杂问题推理,深度逻辑分析多功能大型语言模型,注重扩展性和效率架构与参数强化学习优化架构,参数规模15亿-700亿MoE混合专家架构,总参数高达6710亿,每个token激活370亿

DeepSeek使用常见问题汇总 DeepSeek使用常见问题汇总 Feb 19, 2025 pm 03:45 PM

DeepSeekAI工具使用指南及常见问题解答DeepSeek是一款功能强大的AI智能工具,本文将解答一些常见的使用问题,助您快速上手。常见问题解答:不同访问方式的区别:网页版、App版和API调用在功能上没有区别,App只是网页版的封装。本地部署使用的是蒸馏模型,能力略逊于完整版DeepSeek-R1,但32位模型理论上拥有90%的完整版能力。酒馆(SillyTavern)是什么?SillyTavern是一个前端界面,需要通过API或Ollama调用AI模型。破限是什么

比特币有没有股票?比特币有股权吗? 比特币有没有股票?比特币有股权吗? Mar 03, 2025 pm 06:42 PM

加密货币市场蓬勃发展,比特币作为领军者,吸引了众多投资者的目光。许多人好奇:比特币有股票吗?答案是否定的。比特币本身并非股票,但投资者可以通过多种途径间接投资比特币相关资产,本文将详细解读。比特币投资的替代方案:与其直接投资比特币,投资者可以通过以下方式参与比特币市场:比特币ETF:这是在股票交易市场上交易的基金,其资产组合包含比特币或比特币期货合约。对于习惯股票投资的投资者来说,这是一个相对便捷的选择,无需直接持有比特币。比特币矿业公司股票:这些公司的业务是比特币挖矿并持有比特币

盘前盘后交易有什么区别?盘前盘后交易区别详解 盘前盘后交易有什么区别?盘前盘后交易区别详解 Mar 03, 2025 pm 11:54 PM

传统金融市场中,盘前盘后交易指常规交易时段以外的交易活动。虽然加密货币市场全天候交易,但像Bitget等交易平台也提供类似功能,尤其是一些同时交易股票和加密货币的综合平台。本文将阐明盘前盘后交易的差异,并探讨其对币价的影响。盘前盘后交易的四大区别:盘前盘后交易与常规交易时段的主要区别在于交易时间、流动性、价格波动和交易量四个方面:交易时间:盘前交易发生在正式交易开始前,盘后交易则在常规交易结束后进行。流动性:盘前盘后交易流动性较低,交易者稀少,买卖价差较大;而常规交易时段流动性高,价

为什么说Bittensor是AI赛道的'比特币”? 为什么说Bittensor是AI赛道的'比特币”? Mar 04, 2025 pm 04:06 PM

原文标题:Bittensor=AIBitcoin?原文作者:S4mmyEth,DecentralizedAIResearch原文编译:zhouzhou,BlockBeats编者按:本文讨论了Bittensor,一个去中心化的AI平台,希望通过区块链技术打破集中式AI公司的垄断,推动开放、协作的AI生态系统。Bittensor采用子网模型,允许不同AI解决方案的出现,并通过TAO代币激励创新。尽管AI市场已成熟,但Bittensor面临竞争风险,可能会受到其他开源

韩国比特币和国内比特币有什么不同吗? 韩国比特币和国内比特币有什么不同吗? Mar 05, 2025 pm 06:51 PM

比特币投资热潮持续升温,比特币作为全球首个去中心化数字资产,其去中心化和全球流通性等特性备受关注。尽管中国曾是比特币最大市场,但政策影响导致交易受限。而如今,韩国成为全球主要比特币市场之一,引发投资者对其与国内比特币差异的疑问。本文将深入分析两国比特币市场的区别。韩、中比特币市场差异解析韩国与中国比特币市场的主要区别体现在价格、市场供需、汇率、法规监管、市场流动性和交易平台等方面:价格差异:韩国比特币价格通常高于中国,这种现象被称为“泡菜溢价”。例如,2024年10月下旬,韩国比特币价格一度

垂直代理:加密原生代理的应用场景和颠覆性潜力解读 垂直代理:加密原生代理的应用场景和颠覆性潜力解读 Mar 04, 2025 am 10:21 AM

人工智能代理(AIAgents)正迅速融入企业日常运营,从大型公司到小型企业,几乎所有领域都已开始应用,包括销售、营销、财务、法律、IT、项目管理、物流、客户服务和工作流自动化等。我们正从人工处理数据、执行重复性任务和使用Excel表格的时代,转变为由AI代理全天候自主运行的时代,这不仅提高了效率,还显着降低了成本。 Web2中AI代理的应用案例:YCombinator的视角Apten:一款结合AI和短信技术的销售与营销优化工具。 BildAI:一款能够读取建筑蓝图,提

一文了解USDC、USDT、USD三者究竟有什么区别 一文了解USDC、USDT、USD三者究竟有什么区别 Jan 09, 2025 pm 02:47 PM

USDC(美元硬币)、USDT(泰达币)和美元(USD)是三种不同的金融工具。USDC由美元支持,稳定性高,用于加密货币交易和结算。USDT声称由美元支持,但存在稳定性问题。USD是法定货币,流动性高,用于日常交易和投资。

See all articles