正則表達式的替換問題
正則表達式,功能很強大,很多稍微專業點的編輯器都提供正則搜索,但在替換功能上,最多提供一個對捕獲組的引用(用“\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:)