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(); 正则中替换函数、返回值可能是一个字符串也可能是一个数组

  1. 正常使用 preg_replace(参数..) 参数列表: 参数1: 正则字符串或者正则数组参数​replacement替换为的字符串 或者 字符串数组 参数3: $string处理的字符串 或者 字符串数组 参数4: 每个模式在每个字符串上进行替换几次数,默认是 -1 全部替换 参数5: 记录替换次数的引用变量 代码案例如下:
  1. 使用子模式进行替换 子模式可以用到第二个参数当中 代码案例如下:
  1. 在前两个参数中都使用数组,可以一起将多个模式(正则)同时替换对应的多个值 替换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 的效果。

这种方法,主要包含二个阶段:

  1. 使用 split 方法,根据指定的字符将字符串分成多个部分。
  2. 然后使用 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()方法替换模式出现的所有内容,我们可以这样做:

  1. 在正则表达式文字中,将g附加到标志部分:/search/g。
  2. 对于正则表达式构造函数,使用 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)的行为方式是一样的,除了两件事:

  1. 如果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

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。