diff --git a/sites/all/modules/rules_data_transforms/rules_data_transforms.rules.inc b/sites/all/modules/rules_data_transforms/rules_data_transforms.rules.inc
index cbdd298..479946d 100644
--- a/sites/all/modules/rules_data_transforms/rules_data_transforms.rules.inc
+++ b/sites/all/modules/rules_data_transforms/rules_data_transforms.rules.inc
@@ -146,7 +146,33 @@ function rules_data_transforms_rules_action_info() {
         ),
         'limit' => array(
           'type' => 'integer',
-          'label' => t('Separator'),
+          'label' => t('Limit'),
+          'optional' => TRUE,
+        ),
+      ),
+      'provides' => array(
+        'output_list' => array(
+          'type' => 'list<text>',
+          'label' => t('Output list'),
+        ),
+      ),
+    ) + $defaults,
+    'preg_split' => array(
+      'label' => t('Split string by a regular expression'),
+      'base' => 'rules_data_transforms_action_preg_split',
+      'parameter' => array(
+        'input_text' => array(
+          'type' => 'text',
+          'label' => t('Input text'),
+        ),
+        'pattern' => array(
+          'type' =>  'text',
+          'label' => t('Pattern'),
+          'description' => t('For example write "[\n]|\r\n" if you need split at line break.'),
+        ),
+        'Limit' => array(
+          'type' => 'integer',
+          'label' => t('Limit'),
           'optional' => TRUE,
         ),
       ),
@@ -371,6 +397,13 @@ function rules_data_transforms_action_explode($input_text, $delimiter, $limit) {
   return array('output_list' => explode($delimiter, $input_text));
 }
 
+function rules_data_transforms_action_preg_split($input_text, $pattern, $limit) {
+  if (isset($limit)) {
+    return array('output_list' => preg_split('/' . $pattern . '/', $input_text, $limit));
+  }
+  return array('output_list' => preg_split('/' . $pattern . '/', $input_text));
+}
+
 function _rules_data_transforms_side_options() {
   return array('left' => t('Left'), 'right' => t('Right'), 'both' => t('Both'));
 }
