diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -4,19 +4,20 @@
 Usage
 -----
 
-Cgrep 6.5.8 Usage: cgrep [OPTION] [PATTERN] files...
+Cgrep 6.5.9 Usage: cgrep [OPTION] [PATTERN] files...
 
 cgrep [OPTIONS] [ITEM]
 
 Pattern:
 
-    -f --file=FILE            read PATTERNs from file (one per line)
-    -w --word                 force word matching
-    -p --prefix               force prefix matching
-    -s --suffix               force suffix matching
-    -e --edit                 use edit distance
-    -i --ignore-case          ignore case distinctions
-    -G --regex                regex matching
+    -f --file=FILE            Read PATTERNs from file (one per line)
+    -w --word                 Force word matching
+    -p --prefix               Force prefix matching
+    -s --suffix               Force suffix matching
+    -e --edit                 Use edit distance
+    -G --regex                Use regex matching (posix)
+    -P --regex-pcre           Use regex matching (pcre)
+    -i --ignore-case          Ignore case distinctions
 
 Context filters (generic):
 
diff --git a/cgrep.cabal b/cgrep.cabal
--- a/cgrep.cabal
+++ b/cgrep.cabal
@@ -1,6 +1,6 @@
 Name:                cgrep
 Description:         Cgrep: a context-aware grep for source codes
-Version:             6.5.8
+Version:             6.5.9
 Synopsis:            Command line tool
 Homepage:            http://awgn.github.io/cgrep/
 License:             GPL-2
@@ -41,7 +41,9 @@
                        safe >=0.3, 
                        stringsearch >=0.3, 
                        unordered-containers >=0.1, 
+                       regex-base >=0.90,
                        regex-posix >=0.90,
+                       regex-pcre >=0.90,
                        either >= 4.0,
                        mtl >= 2.0,
                        unix-compat >= 0.4,
diff --git a/src/CGrep/CGrep.hs b/src/CGrep/CGrep.hs
--- a/src/CGrep/CGrep.hs
+++ b/src/CGrep/CGrep.hs
@@ -67,17 +67,19 @@
   } = i || k || d || h || n || s || c || o
 
 
+isRegexp :: Options -> Bool
+isRegexp opt = regex_posix opt || regex_pcre opt
 
 runCgrep :: FilePath -> [Text8] -> ReaderT Options IO [Output]
 runCgrep filename patterns = do
     opt <- ask
     case () of
-        _ | not (regex opt) && not (hasTokenizerOpt opt) && not (semantic opt) && edit_dist opt -> Levenshtein.search filename patterns
-          | not (regex opt) && not (hasTokenizerOpt opt) && not (semantic opt)                  -> BoyerMoore.search filename patterns
-          | not (regex opt) && semantic opt && hasLanguage filename opt [C,Cpp]                 -> CppSemantic.search filename patterns
-          | not (regex opt) && semantic opt                                                     -> Semantic.search filename patterns
-          | not (regex opt)                                                                     -> CppTokenizer.search filename patterns
-          | regex opt                                                                           -> Regex.search filename patterns
-          | otherwise                                                                           -> undefined
+        _ | (not . isRegexp) opt && not (hasTokenizerOpt opt) && not (semantic opt) && edit_dist opt -> Levenshtein.search filename patterns
+          | (not . isRegexp) opt && not (hasTokenizerOpt opt) && not (semantic opt)                  -> BoyerMoore.search filename patterns
+          | (not . isRegexp) opt && semantic opt && hasLanguage filename opt [C,Cpp]                 -> CppSemantic.search filename patterns
+          | (not . isRegexp) opt && semantic opt                                                     -> Semantic.search filename patterns
+          | (not . isRegexp) opt                                                                     -> CppTokenizer.search filename patterns
+          | isRegexp opt                                                                             -> Regex.search filename patterns
+          | otherwise                                                                                -> undefined
 
 
diff --git a/src/CGrep/Strategy/Regex.hs b/src/CGrep/Strategy/Regex.hs
--- a/src/CGrep/Strategy/Regex.hs
+++ b/src/CGrep/Strategy/Regex.hs
@@ -24,7 +24,11 @@
 
 import Control.Monad.Trans.Reader
 import Control.Monad.IO.Class
+
+import Text.Regex.Base
 import Text.Regex.Posix
+import Text.Regex.PCRE
+
 import Data.Array
 
 import CGrep.Common
@@ -36,6 +40,7 @@
 import Debug
 
 
+
 search :: FilePath -> [Text8] -> ReaderT Options IO [Output]
 search f patterns = do
 
@@ -53,10 +58,12 @@
 
     -- search for matching tokens
 
+        (=~~~) = if regex_pcre opt then (Text.Regex.PCRE.=~) else (Text.Regex.Posix.=~)
+
         tokens = map (\(str, (off,_)) -> (off, C.unpack str) ) $
-                    concatMap elems $ patterns >>= (\p -> elems (getAllTextMatches $ text''' =~ p :: (Array Int) (MatchText Text8)))
+                    concatMap elems $ patterns >>= (\p -> elems (getAllTextMatches $ text''' =~~~ p :: (Array Int) (MatchText Text8)))
 
-    putStrLevel1 $ "strategy  : running regex search on " ++ filename ++ "..."
+    putStrLevel1 $ "strategy  : running regex " ++ (if regex_pcre opt then "(pcre)" else "(posix)") ++ " search on " ++ filename ++ "..."
     putStrLevel2 $ "tokens    : " ++ show tokens
     putStrLevel3 $ "---\n" ++ C.unpack text''' ++ "\n---"
 
diff --git a/src/CmdOptions.hs b/src/CmdOptions.hs
--- a/src/CmdOptions.hs
+++ b/src/CmdOptions.hs
@@ -30,7 +30,8 @@
           ,     prefix_match  = False       &= help "Force prefix matching" &=explicit &= name "prefix" &= name "p"
           ,     suffix_match  = False       &= help "Force suffix matching" &=explicit &= name "suffix" &= name "s"
           ,     edit_dist   = False         &= help "Use edit distance" &=explicit &= name "edit" &= name "e"
-          ,     regex = False               &= help "Use regex matching" &= explicit &= name "G" &=name "regex"
+          ,     regex_posix = False         &= help "Use regex matching (posix)" &= explicit &= name "G" &=name "regex"
+          ,     regex_pcre = False          &= help "Use regex matching (pcre)"  &= explicit &= name "P" &=name "regex-pcre"
           ,     ignore_case = False         &= help "Ignore case distinctions"
           ,     code = False                &= groupname "\nContext filters (generic)" &= help "Enable search in source code"     &= explicit &= name "c" &= name "code"
           ,     comment = False             &= help "Enable search in comments"        &= explicit &= name "m" &= name "comment"
diff --git a/src/Config.hs b/src/Config.hs
--- a/src/Config.hs
+++ b/src/Config.hs
@@ -33,7 +33,7 @@
 cgreprc = "cgreprc"
 
 version :: String
-version = "6.5.8"
+version = "6.5.9"
 
 
 data Config = Config
diff --git a/src/Options.hs b/src/Options.hs
--- a/src/Options.hs
+++ b/src/Options.hs
@@ -29,8 +29,9 @@
     ,   prefix_match        :: Bool
     ,   suffix_match        :: Bool
     ,   edit_dist           :: Bool
+    ,   regex_posix         :: Bool
+    ,   regex_pcre          :: Bool
     ,   ignore_case         :: Bool
-    ,   regex               :: Bool
     -- Context:
     ,   code                :: Bool
     ,   comment             :: Bool
