diff --git a/Text/RegexPR.hs b/Text/RegexPR.hs
--- a/Text/RegexPR.hs
+++ b/Text/RegexPR.hs
@@ -8,6 +8,7 @@
 , gmatchRegexPR		-- EXPERIMENTAL
 , subRegexPR
 , gsubRegexPR
+, gsubRegexPRBy
 , splitRegexPR
 ) where
 
@@ -43,19 +44,22 @@
          Nothing                   -> src
 
 gsubRegexPR :: String -> String -> String -> String
-gsubRegexPR reg sub src = gsubRegexPRGen Nothing reg sub ("", src)
+gsubRegexPR reg sub src = gsubRegexPRGen Nothing reg (const sub) ("", src)
 
+gsubRegexPRBy :: String -> (String -> String) -> String -> String
+gsubRegexPRBy reg subf src = gsubRegexPRGen Nothing reg subf ("", src)
+
 gsubRegexPRGen ::
-  Maybe (String, String) -> String -> String -> (String, String) -> String
-gsubRegexPRGen pmp reg sub src
+  Maybe (String, String) -> String -> (String -> String) -> (String, String) -> String
+gsubRegexPRGen pmp reg fsub src
   = case matchRegexPRVerbose reg src of
-      Just al@((pre, _, sp@(~(p,x:xs))), _)
+      Just al@((pre, match, sp@(~(p,x:xs))), _)
         -> case (pmp, sp) of
                 (Just (_, ""), _)  -> ""
                 _ | Just sp == pmp -> pre ++ [x] ++
-                                      gsubRegexPRGen (Just sp) reg sub (x:p, xs)
-                  | otherwise      -> pre ++ subBackRef al sub ++
-                                      gsubRegexPRGen (Just sp) reg sub sp
+                                      gsubRegexPRGen (Just sp) reg fsub (x:p, xs)
+                  | otherwise      -> pre ++ subBackRef al (fsub match) ++
+                                      gsubRegexPRGen (Just sp) reg fsub sp
       Nothing -> snd src
 
 subBackRef ::
diff --git a/regexpr.cabal b/regexpr.cabal
--- a/regexpr.cabal
+++ b/regexpr.cabal
@@ -1,5 +1,5 @@
 Name:		regexpr
-Version:	0.3.4
+Version:	0.4
 License:	LGPL
 License-File:	LICENSE
 Author:		Yoshikuni Jujo <PAF01143@nifty.ne.jp>
@@ -14,8 +14,9 @@
   .
   > matchRegexPR :: String -> Maybe ((String, (String, String)), [(Int, String)])
   > gmatchRegexPR :: String -> [((String, (String, String)), [(Int, String)])]
-  > subRegexPR :: String -> String -> String
-  > gsubRegexPR :: String -> String -> String
+  > subRegexPR :: String -> String -> String -> String
+  > gsubRegexPR :: String -> String -> String -> String
+  > gsubRegexPRBy :: String -> (String -> String) -> String -> String
   > splitRegexPR :: String -> String -> [String]
   .
   Examples
