PHP正则表达式核心技术完全详解 第5节 php正则替换函数
作者:极客小俊
一个专注于web技术的80后
你不用拼过聪明人,你只需要拼过那些懒人 你就一定会超越大部分人!
说到替换呢 这里我觉得首先要回忆一下字符串的相关替换函数!
str_replace() 在字符串中查找字符,然后替换成想要的字符 str_ireplace() 在字符串中查找字符,然后替换成想要的字符 (不区分大小写) 小提示 str_replace() 函数是全局替换
练习: 在字符串中查找数组对应的字符,设为红色 代码如下:
str_replace()方法中的参数 有三种使用技巧 第一种: str_replace(string,string,string,替换次数); 代码如下:
第二种: str_replace(array,string,string,替换次数); 粗暴点 , 代码如下:
第三种: str_replace(array,array,string,替换次数); 代码如下:
以上就是回顾了一下 字符串中的替换,别走开,接下来我们才要进入正则函数替换的正题哦!
PHP正则替换函数 preg_replace(); 正则中替换函数、返回值可能是一个字符串也可能是一个数组
- 正常使用 preg_replace(参数..) 参数列表: 参数1: 正则字符串或者正则数组参数replacement替换为的字符串 或者 字符串数组 参数3: $string处理的字符串 或者 字符串数组 参数4: 每个模式在每个字符串上进行替换几次数,默认是 -1 全部替换 参数5: 记录替换次数的引用变量 代码案例如下:
- 使用子模式进行替换 子模式可以用到第二个参数当中 代码案例如下:
- 在前两个参数中都使用数组,可以一起将多个模式(正则)同时替换对应的多个值 替换UBB代码, 这里就不介绍UBB是什么了 自己百度一下就会知道简单地一匹 代码案例图如下:
注意: 在php7以后preg_replace()函数第一个参数正则中已经不支持e这个模式修正符号、也就是不再支持/e修饰符,如果要使用函数就请用: preg_replace_callback()函数
preg_replace_callback(参数..)函数 作用: 执行一个正则表达式搜索并且使用一个回调进行替换,匹配到的字符和子组都包含在回调函数的参数当中 参数列表: 参数1: 正则字符串 或一个数组 参数2: 处理替换的回调函数 支持 普通函数、匿名函数、类方法 参数3: 处理的字符串 参数4: 每个模式在每个字符串上进行替换几次数,默认是 -1 全部替换 参数5: 记录替换次数的引用变量 例1:匿名函数替换 代码案例如下
例2:类的方法替换方法 代码案例如下
今日头条@极客小俊,首发原创文章
如果喜欢话请 \”点赞 评论 收藏\” 一键三连
大家的支持就是我坚持下去的动力!
不要忘了❤️哦!
B站: https://space.bilibili.com/395999414
在 JavaScript 中替换所有指定字符 3 种方法
在 JS 没有提供一种简便的方法来替换所有指定字符。 在 Java 中有一个 replaceAll() ,replaceAll(String regex, String replacement))方法使用给定的参数 replacement 替换字符串所有匹配给定的正则表达式的子字符串。
在 JS 最新的提案 String.prototype.replaceAll() 中,它将replaceAll()方法用于字符串。
在该提案还没出来之前,我们来看看在 JS 中有哪些方法可以实现 reaplceAll 的效果。
这种方法,主要包含二个阶段:
- 使用 split 方法,根据指定的字符将字符串分成多个部分。
- 然后使用 join 方法将分割的多个部分连接在一直,并在它们之间插入指定的字符。
例如,我们将字符串\’1+2+3\’中的+替换为-。首先,通过split方法根据 +分割符将\’1+2+3\’分开,得到[\’1\’,\’2\’,\’3\’]。然后通过 join 方法并指定连接字条-,得到结果\’1-2-3\’。示例如下:
\’duck duck go\’.split(\’duck\’)将字符串分割成几段:[\’\’, \’ \’, \’ go\’]。[\’\’, \’ \’, \’ go\’].join(\’goose\’) 在元素之间插入\’goose\’并连接起来,得到\’goose goose go\’。
最后我们把这种方式封装成一个帮助函数 replaceAll:
这种方法需要将字符串转换为数组,然后再转换回字符串。这是一种变通方法,但不是一个好的解决方案。
String.prototype。replace(regExp, replaceWith)搜索正则表达式regExp出现的情况,然后使用replaceWith字符串替换所有匹配项。
必须启用正则表达式上的全局标志,才能使replace()方法替换模式出现的所有内容,我们可以这样做:
- 在正则表达式文字中,将g附加到标志部分:/search/g。
- 对于正则表达式构造函数,使用 flags 参数:new RegExp(\’search\’, \’g\’)
我们把所有的duck换成goose:
正则表达式文字/duck/g与\’duck\’字符串匹配,并且启用了全局模式。
\’duck duck go\’.replace(/duck/g, \’goose\’)用\’goose\’替换所有匹配/duck/g字符串。
通过向正则表达式添加i标志,可以忽略大小写:
再次查看正则表达式:/duck/gi。 正则表达式启用了不区分大小写的搜索:i和全局标志g。 /duck/gi匹配\’duck\’,以及\’DUCK\’,\’Duck\’等。
\’DUCK duck go\’.replace(/duck/gi, \’goose\’)以不区分大小写的方式用\’goose\’替换了/duck/gi`所匹配到的结果。
虽然正则表达式替换了所有出现的字符串,但在我看来,这种方法过于繁琐。
当在运行时确定搜索字符串时,使用正则表达式方法不方便。 从字符串创建正则表达式时,必须转义字符-[] / {}()* +? 。 \\ ^ $ |,示例如下:
上面的代码片段尝试将搜索字符串\’+\’转换为正则表达式。 但是\’+\’是无效的正则表达式,因此会引发SyntaxError: Invalid regular expression: /+/异常。
如果replace(search, replaceWith)的第一个参数是字符串,那么该方法只替换search的第一个结果。
\’duck duck go\’.replace(\’duck\’,\’goose\’)仅将\’duck\’的首次出现替换为\’goose\’。
最后,新的提案String.prototype.replaceAll()(在第3阶段)将replaceAll()方法引入到 JavaScript 的字符串中。
replaceAll(search, replaceWith)字符串方法用replaceWith替换所有的search字符串,没有任何变通方法。
我们把所有的duck换成goose:
\’duck duck go\’.replaceAll(\’duck\’, \’goose\’)将所有出现的\’duck\’字符串替换为\’goose\’,这是简单明了的解决方案。
字符串方法replaceAll(search, replaceWith)和replace(search, replaceWith)的行为方式是一样的,除了两件事:
- 如果search参数是一个字符串,那么replaceAll()用replaceWith替换所有出现的search,而replace()只替换第一次出现的search。
2.如果search参数是一个非全局正则表达式,那么replaceAll()将抛出一个TypeError 异常。
替换所有出现的字符串应该很容易。 但是,JavaScript 很久一段时间没有提供这种方法。
一种方法是通过搜索字符串将字符串拆分为多个块,将字符串重新连接,然后在块之间放置替换字符串:string.split(search).join(replaceWith)。 这种方法有效,但是很麻烦。
另一种方法是将String.prototype.replace()与启用了全局搜索的正则表达式一起使用:string.replace(/SEARCH/g, replaceWith)。
不幸的是,由于必须转义正则表达式的特殊字符,因此在运行时无法轻松地从字符串生成正则表达式。 处理正则表达式以简单地替换字符串的方法非常麻烦。
最后,String.prototype.replaceAll()方法可以轻松地直接替换所有出现的字符串:string.replaceAll(search, replaceWith)。 这是第3阶段的提案,但希望很快就会纳入新的JavaScript标准。
我的建议是使用replaceAll()来替换字符串。但你需要一个polyfill来使用这个方法。
你还知道其他替换所有字符串出现的方法吗?欢迎留言讨论。
作者: Dmitri Pavlutin 译者:前端小智 来源:dmitripavlutin
原文:https://dmitripavlutin.com/replace-all-string-occurrences-javascript/
学习VBA,报表做到飞 第四章 正则表达式 4.5 Replace与Test
第四章 正则表达式
4.5 Replace与Test
在上一节“正则表达式的代码格式”里,我们了解了正则表达式的Execute方法的使用,现在就让我们通过一个案例来了解一下正则表达式的另外两个方法Replace与Test的使用。
小程序:
把下表左列中的联系方式提取出来,填入“联系方式”栏,其余内容填入“个人简介”栏。如果没有联系方式,则填“无”。
Sub replace与test()
Dim reg As New RegExp
With reg
.Global = True
.Pattern = \”\\d+\”
For Each ss In Range(\”a2\”, Cells(Rows.Count, 1).End(xlUp))
If .Test(ss) Then
Set 结果 = .Execute(ss)
ss.offset(0, 1) = 结果(0)
ss.offset(0, 2) = .replace(ss, \”\”)
Else
ss.offset(0, 1) = \”无\”
ss.offset(0, 2) = ss
End If
Next
End With
End Sub
首先用Test方法测试单元格的内容是否能够匹配成功。如果成功返回True,把匹配到的内容填入“联系方式”栏,再用replace方法把匹配到的结果替换为空(这里的用法与VBA的Replace用法不同,在本章第3节已有介绍)。如果匹配不成功返回False,“联系方式”栏填“无”,把单元格内容填到“个人简介”栏。最后得到如下结果:
往期精彩回顾:
我是云飞扬,职场财会人员,愿与大家分享表格制作和数据统计分析的技巧与方法,希望大家的工作更便捷,更轻松!
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。