正则表达式的替换问题
正则表达式,功能很强大,很多稍微专业点的编辑器都提供正则搜索,但在替换功能上,最多提供一个对捕获组的引用(用“\n”来代码第n个捕获组),很多功能都无法实现,要么敲代码,写一个特定程序来完成,要么直接手动修改,简单重复。比如下面的场景。
3*4=?
-6*12=?
9*-5=?
……
如何将问号替换为相乘得到的结果?
因为正则表达式是处理文本的,无法完成数学运算,也不能执行一些编程语言里的方法,比如说判断,也无法生成序列之类的。
解决办法——正则文本替换器
为了解决这些平时碰到的问题,我编写了一个正则文本替换器,替换内容中,允许使用函数表达式,相当于把编程的部分封装了起来,只需要使用简单的表达式就可以完成复杂的替换,并且,实时显示匹配到的内容,和将替换为的内容。
下面是软件的截图:
替换表达式的格式为:
$函数名(参数1,参数2,参数3)
$函数名[引用别名](参数1,参数2,参数3)
像上面的问题,使用正则表达式:
((-?\d+)\*(-?\d+)=)\?
和替换表达式:
$(1)$*($(2),$(3))
再执行替换,就完成了。
函数说明:$(n)表示第n个捕获组,$*(n,m)表示n和m的积
如果需要将刚才的替换中,每行加上一个行号,则将替换表达式改成:
$Seq(1,1)、$(1)$*($(2),$(3))
即可生成:
1、3*4=12
2、-6*12=-72
3、9*-5=-45
函数说明:$Seq(n,m)为序列生成器,n表示起始值,m表示步增值。
本替换器不仅能实现四则运算、求模,还可以进行字母大小写转换,进制转换(如16进制转10进制),plsql里的Nvl、Iif,还有序列生成器等。
如果这些函数仍满足不了你的需求,还可以自己扩展,添加自己的函数,非常方便。
软件的帮助菜单里有详细的函数说明、使用帮助,例子,还有添加自定义函数的指导。
下载地址:https://github.com/trytocatch/RegexReplacer/raw/master/executable%20jar/RegexReplacer.jar
注:经网友反映,jre1.6或以下运行报错,现已修正,jre1.6下可正常运行,但不能使用命名捕获组;jre1.7则可以,还是原来的下载地址
目前该项目已开源,地址:https://github.com/trytocatch/RegexReplacer,也可在那里下载最新的可执行jar包。自认为设计得还算漂亮,欢迎fork/pull:)