posts - 17,  comments - 25,  trackbacks - 0

正则表达式的替换问题

  正则表达式,功能很强大,很多稍微专业点的编辑器都提供正则搜索,但在替换功能上,最多提供一个对捕获组的引用(用“\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:)

 

posted on 2013-07-25 05:26  trytocatch  阅读(...)  评论(...编辑  收藏