php正则表达式学到什么程度,php正则表达式心得总结

一、php采用的是PCRE模式:

二、常用函数

preg_replace($pattern, $replacement, $string);

preg_match

执行一次正则表达式匹配

$subject = "abcdef";

$pattern = '/^def/';

preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);

print_r($matches);

preg_match_all

执行一个全局正则表达式匹配

preg_match()返回 pattern 的匹配次数。 它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后 将会停止搜索。preg_match_all()不同于此,它会一直搜索subject 直到到达结尾。 如果发生错误preg_match()返回 FALSE。

三、模式修饰符(匹配模式)

i:大小写不敏感

m:可跨行匹配,默认是不跨行匹配

s:点号元字符可匹配换行符,默认点元字符是不匹配换行符

U:这个修饰符逆转了量词的"贪婪"模式。 使量词默认为非贪婪的,通过量词后紧跟? 的方式可以使其成为贪婪的。这和 perl 是不兼容的。 它同样可以使用 模式内修饰符设置 (?U)进行设置, 或者在量词后以问号标记其非贪婪(比如.*?)

u:模式字符串被认为是utf-8的,php 4.3.5 开始检查模式的 utf-8 合法性

D:$元字符匹配结果中不包括换行符,默认模式是包括换行符的,设置成上面的m模式时会被忽略

x:不常用,模式中的没有经过转义的或不在字符类中的空白数据字符总会被忽略

四、还有一些函数

preg_replace_callback 执行一个正则表达式搜索并且使用一个回调进行替换

preg_split 正则分割字符串为数组

五、子组(子模式)

字符集匹配 如果是字符集是多个字符组成,也叫字组(子模式),比如匹配apple和orange任意一个:

this is a (apple|orange)

//如果要否定子模式,则需要使用断言:前断言?!和后断言?

this is a (?!apple|orange).*

会匹配:this a apple、this a orange、this a ,可以匹配空字符

如果不需要捕获括符内容的话,在前面加上 ?: 即可,如果需要再加上内部选项设置,在 ?和:之间设置,一下写法作用是相同的

字组(子模式)命名 三种写法,后面两种需要版本>=php5.2.2支持:

(?Ppattern)

(?pattern)

(?'name'pattern)

多个子组可以共用一个后向引用数字

有个这样的问题,当我们这样用的时候:

(?:(Sat)ur|(Sun))day

这里当后向引用 1 空时Sun 存储在后向引用 2 中. 当后向引用 2 不存在的时候 Sat 存储在后向引用 1中; 使用 (?| 修改模式来修复这个问题:

(?|(Sat)ur|(Sun))day

使用这个模式, Sun和Sat都会被存储到后向引用1中。

单字符量词

* 等价于 {0,}

+ 等价于 {1,}

? 等价于 {0,1}

特殊用法:

量词紧跟着一个 ?(问号) 标记,它就会成为懒惰(非贪婪)模式,如果在模式修饰符中设置了U 模式,量词后面加 ?(问号) 标记则成婪模式,就是和全局的匹配模式模式反着来。

量词紧跟着一个 +(加号) 标记,它会吃掉整个字符串

在大于等于php5.2.2版本中采用 \g{1} 写法可以更好的理解,序列\1, \g1,\g{1} 之间是同义词关系,这种用法可以消除使用反斜线紧跟数值描述反向引用时候产生的歧义

\g 转义序列紧跟一个负数代表一个相对的后向引用。比如: (foo)(bar)\g{-1} 可以匹配字符串 ”foobarbar”, (foo)(bar)\g{1} 可以匹配 ”foobarfoo”。 这在长的模式中作为一个可选方案, 用来保持对之前一个特定子组的引用的子组序号的追踪。

后向引用也支持使用子组名称的语法方式描述, 比如 (?P=name) 或者 PHP 5.2.2 开始可以实用\k 或 \k'name'。 另外在 PHP 5.2.4 中加入了对\k{name} 和 \g{name} 的支持。

八、断言

前瞻性断言:只对它前面的字符生效

正面断言:以 (?= 开头

消极断言:以 (?! 开头

后瞻性断言:只对它后面的字符生效

正面断言:以 (?<= 开头

消极断言:以 (?

可以使匹配器根据一个断言的结果, 或者之前的一个捕获子组是否匹配来条件式的匹配一个子组或者在两个可选子组中选择。 条件子组的两种语法如下:

(?(condition)yes-pattern)

(?(condition)yes-pattern|no-pattern)

十、性能

Jeffrey Friedl 书(精通正则表达式)中包含了很多关于正则表达式性能的讨论。

[aeiou] 这样的字符类会比可选路径 (a|e|i|o|u) 高效

模式匹配没有换行符的目标字符串,^.* 性能更佳

(a+)b 比 (a+) 性能高,(a+)* 模式可以有 33 种方式匹配 ”aaaa”,它会尝试每种可能的变化,很消耗性能

十一、其他知识点

字符集匹配

单个可选分支是这样写,比如匹配abc中任意一个:

[abc]

如果是字符集是多个字符组成,也叫字组(子模式),比如匹配apple和orange任意一个:

this is a (apple|orange|)

会匹配:this a apple、this a orange、this a ,可以匹配空字符

如果不需要捕获括符内容的话,在前面加上 ?: 即可,如果需要再加上内部选项设置,在 ?和:之间设置,一下写法作用是相同的

(?i:saturday|sunday)

(?:(?i)saturday|sunday)

关于锚 ^ 元字符

正常情况下^表示开头处,但是在字符集下,它代表反向(否定),比如下面表示不包含abc中任意一个字符

[^abc]

内部选项设置

默认的模式修饰符是全局的,但有些场景需要使用局部修饰符(也就说说局部模式修饰符),比如某部分匹配可以不区分大小写(默认是严格大小写区分的),使用方法为:(?修饰符)

apple (?iand) orange

以上会匹配apple and orange、apple And orange等等

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值