Index: backup_migrate.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/backup_migrate/backup_migrate.install,v
retrieving revision 1.1.2.2.2.1.2.19
diff -u -p -r1.1.2.2.2.1.2.19 backup_migrate.install
--- backup_migrate.install	24 Aug 2009 18:31:52 -0000	1.1.2.2.2.1.2.19
+++ backup_migrate.install	17 May 2010 17:25:12 -0000
@@ -201,7 +201,9 @@ function _backup_migrate_setup_database_
       'filters' => array(
         'compression' => variable_get("backup_migrate_compression", "none"),
         'exclude_tables' => variable_get("backup_migrate_exclude_tables", array()),
+        'exclude_tables_regex' => variable_get("backup_migrate_exclude_tables_regex", ""),
         'nodata_tables' => variable_get("backup_migrate_nodata_tables", array()),
+        'nodata_tables_regex' => variable_get("backup_migrate_nodata_tables_regex", ""),
       ),
       'name' => t('Default Settings'),
     );
@@ -364,19 +366,27 @@ function backup_migrate_update_2005() {
   // Copy the no-data and exclude tables settings into the 'filter' field.
   $result = db_query('SELECT * FROM {backup_migrate_profiles}');
   while ($item = db_fetch_array($result)) {
-    if (isset($item['nodata_tables']) && isset($item['exclude_tables'])) {
+    if (isset($item['nodata_tables']) && isset($item['exclude_tables']) && isset($item['nodata_tables_regex']) && isset($item['exclude_tables_regex'])) {
       $profile = backup_migrate_get_profile($item['profile_id']);
       $profile->filters['nodata_tables'] = unserialize($item['nodata_tables']);
+      $profile->filters['nodata_tables_regex'] = $item['nodata_tables_regex'];
       $profile->filters['exclude_tables'] = unserialize($item['exclude_tables']);
+      $profile->filters['exclude_tables_regex'] = $item['exclude_tables_regex'];
       $profile->save();
     }
   }
   if (db_column_exists('backup_migrate_profiles', 'nodata_tables')) {
     db_drop_field($ret, 'backup_migrate_profiles', 'nodata_tables');
   }
+  if (db_column_exists('backup_migrate_profiles', 'nodata_tables_regex')) {
+    db_drop_field($ret, 'backup_migrate_profiles', 'nodata_tables_regex');
+  }
   if (db_column_exists('backup_migrate_profiles', 'exclude_tables')) {
     db_drop_field($ret, 'backup_migrate_profiles', 'exclude_tables');
   }
+  if (db_column_exists('backup_migrate_profiles', 'exclude_tables_regex')) {
+    db_drop_field($ret, 'backup_migrate_profiles', 'exclude_tables_regex');
+  }
 
   return $ret;
 }
\ No newline at end of file
Index: includes/destinations.db.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/backup_migrate/includes/destinations.db.inc,v
retrieving revision 1.1.2.14
diff -u -p -r1.1.2.14 destinations.db.inc
--- includes/destinations.db.inc	8 May 2010 02:45:38 -0000	1.1.2.14
+++ includes/destinations.db.inc	17 May 2010 17:25:13 -0000
@@ -91,7 +91,9 @@ class backup_migrate_destination_db exte
     $nodata_tables = array_merge($core, module_invoke_all('devel_caches'));
      return array(
       'nodata_tables' => $nodata_tables,
+      'nodata_tables_regex' => "",
       'exclude_tables' => array(),
+      'exclude_tables_regex' => "",
       'utils_lock_tables' => FALSE,
    );
   }
@@ -133,6 +135,23 @@ class backup_migrate_destination_db exte
       '#description' => t('This can help reduce data corruption, but will make your site unresponsive.'),
     );
 
+    $form['advanced']['exclude_tables_regex'] = array(
+      "#type" => "textfield",
+      "#title" => t("Exclude the following tables altogether (regular expression)"),
+      "#default_value" => $settings['exclude_tables_regex'],
+      "#description" => t("If a table's name matches this regular expression, the table will not be added to the backup file. Leave empty to exclude only the tables selected above."),
+      "#field_prefix" => "/^",
+      "#field_suffix" => "$/",
+    );
+    $form['advanced']['nodata_tables_regex'] = array(
+      "#type" => "textfield",
+      "#title" => t("Exclude the data from the following tables (regular expression)"),
+      "#default_value" => $settings['nodata_tables_regex'],
+      "#description" => t("If a table's name matches this regular expression, the table will have its structure backed up but not its content. Leave empty to exclude the data from only the tables selected above."),
+      "#field_prefix" => "/^",
+      "#field_suffix" => "$/",
+    );
+
     return $form;
   }
 
@@ -243,7 +262,7 @@ class backup_migrate_destination_db exte
       $tables = array();
       foreach ($this->get_table_names() as $table) {
         // There's no need to lock excluded or structure only tables because it doesn't matter if they change.
-        if (empty($settings->filters['exclude_tables']) || !in_array($table, (array)$settings->filters['exclude_tables'])) {
+        if (empty($settings->filters['exclude_tables']) || !in_array($table, (array)$settings->filters['exclude_tables']) || !preg_match("/^". $settings->filters['exclude_tables_regex'] ."$/", $table)) {
           $tables[] = $table;
         }
       }
Index: includes/destinations.db.mysql.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/backup_migrate/includes/Attic/destinations.db.mysql.inc,v
retrieving revision 1.1.2.4
diff -u -p -r1.1.2.4 destinations.db.mysql.inc
--- includes/destinations.db.mysql.inc	26 Nov 2009 21:58:21 -0000	1.1.2.4
+++ includes/destinations.db.mysql.inc	17 May 2010 17:25:13 -0000
@@ -86,7 +86,9 @@ class backup_migrate_destination_db_mysq
   function _backup_db_to_file($file, $settings) {
     $lines = 0;
     $exclude = !empty($settings->filters['exclude_tables']) ? $settings->filters['exclude_tables'] : array();
+    $exclude_regex = !empty($settings->filters['exclude_tables_regex']) ? ("/^". $settings->filters['exclude_tables_regex'] ."$/") : "";
     $nodata = !empty($settings->filters['nodata_tables']) ? $settings->filters['nodata_tables'] : array();
+    $nodata_regex = !empty($settings->filters['nodata_tables_regex']) ? ("/^". $settings->filters['nodata_tables_regex'] ."$/") : "";
     if ($file->open(TRUE)) {
       $file->write($this->_get_sql_file_header());
       $alltables = $this->_get_tables();
@@ -94,10 +96,10 @@ class backup_migrate_destination_db_mysq
         if (_backup_migrate_check_timeout()) {
           return FALSE;
         }
-        if ($table['Name'] && !isset($exclude[$table['Name']])) {
+        if ($table['Name'] && !isset($exclude[$table['Name']]) && !preg_match($exclude_regex, $table['Name'])) {
           $file->write($this->_get_table_structure_sql($table));
           $lines++;
-          if (!in_array($table['Name'], $nodata)) {
+          if (!in_array($table['Name'], $nodata) && !preg_match($nodata_regex, $table['Name'])) {
             $lines += $this->_dump_table_data_sql_to_file($file, $table);
           }
         }
Index: includes/schedules.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/backup_migrate/includes/schedules.inc,v
retrieving revision 1.1.2.1.2.15
diff -u -p -r1.1.2.1.2.15 schedules.inc
--- includes/schedules.inc	26 Nov 2009 21:16:59 -0000	1.1.2.1.2.15
+++ includes/schedules.inc	17 May 2010 17:25:14 -0000
@@ -184,6 +184,8 @@ class backup_migrate_schedule extends ba
    * Get the number of excluded tables.
    */
   function get_exclude_tables_count() {
+    // FIXME: Should this include the ones that has been excluded by regex?
+    // This function doesn't seem to be called by anybody.
     return count($this->exclude_tables) ? count($this->exclude_tables) : t("No tables excluded");
   }
 
@@ -191,6 +193,8 @@ class backup_migrate_schedule extends ba
    * Get the number of excluded tables.
    */
   function get_nodata_tables_count() {
+    // FIXME: Should this include the ones that has been set nodata by regex?
+    // This function doesn't seem to be called by anybody.
     return count($this->nodata_tables) ? count($this->nodata_tables) : t("No data omitted");
   }
 
