diff --git a/gcc/cobol/lexio.cc b/gcc/cobol/lexio.cc
index f1fdaa693030b176fb964258124abd7d043ddb93..6014b253d6c2449c1780b7f7f3546a08983e8f3f 100644
--- a/gcc/cobol/lexio.cc
+++ b/gcc/cobol/lexio.cc
@@ -344,7 +344,7 @@ check_source_format_directive( filespan_t& mfile ) {
     "(format[[:blank:]]+)?"
     "(is[[:blank:]]+)?"
     "(fixed|free)";
-  regex re(pattern, extended_icase);
+  static regex re(pattern, extended_icase);
 
   // show contents of marked subexpressions within each match
   cmatch cm;
@@ -484,7 +484,7 @@ parse_replacing_term( const char *stmt, const char *estmt ) {
     "(([[:space:];,]+[\"'=[:alnum:]+-]{1,2})" "|" "[[:space:];,]*([.]))?"  // 13, 14, 15
     ;
 
-  regex re(pattern, extended_icase);
+  static regex re(pattern, extended_icase);
   cmatch cm;
 
   if( ! regex_search( stmt, estmt, cm, re) ) return output;
@@ -840,7 +840,7 @@ parse_copy_directive( filespan_t& mfile ) {
     /*19,20 */ "(" "([[:space:]]*[.])" "|" "[[:space:]]+REPLACING" ")"
     ;
 
-  regex re(pattern, extended_icase);
+  static regex re(pattern, extended_icase);
   cmatch cm;
   copy_descr_t outcome(mfile.cur, mfile.cur);
 
@@ -929,7 +929,7 @@ parse_replace_last_off( filespan_t& mfile ) {
     "REPLACE" "[[:space:]]+"
     "(LAST[[:space:]]+)?OFF[[:space:]]*[.]"
     ;
-  regex re(pattern, extended_icase);
+  static regex re(pattern, extended_icase);
   cmatch cm;
 
   // REPLACE [LAST] OFF?
@@ -976,7 +976,7 @@ parse_replace_text( filespan_t& mfile, size_t current_lineno ) {
     /*   */      ")"
     /*   */    ")+[[:space:]]*[.]"
     ;
-  regex re(pattern, extended_icase);
+  static regex re(pattern, extended_icase);
   cmatch cm;
 
   if( false && yy_flex_debug ) {
@@ -1045,7 +1045,7 @@ parse_replace_directive( filespan_t& mfile, size_t current_lineno ) {
   static const char pattern[] =
     "REPLACE" "[[:space:]]+" "(LAST|OFF|ALSO|LEADING|TRAILING|==)";
 
-  regex re(pattern, extended_icase);
+  static regex re(pattern, extended_icase);
   cmatch cm;
 
   // REPLACE appears in current buffer?