my $re = shift or die "re expected\n"; while (<>) { chomp; my ($field, $value) = ($_ =~ $re); print "'$_' -> ('$field', '$value')\n"; } #### 'a:b:c' -> ('a', 'b:c') 'a\:b:c' -> ('a\:b', 'c') 'a\\:b:c' -> ('a\\', 'b:c') 'a\\\:b:c' -> ('a\\\:b', 'c') 'a:' -> ('a', '') ':b' -> ('', 'b') #### 'a\:b' -> ('', 'b') #### ^((?:[^:\\]+|\\.)*):(.*)
## 'a:b:c' -> ('a', 'b:c') 'a\:b:c' -> ('a\:b', 'c') 'a\\:b:c' -> ('a\\', 'b:c') 'a\\\:b:c' -> ('a\\\:b', 'c') 'a:' -> ('a', '') ':b' -> ('', 'b') ##
## 'a\:b' -> ('', 'b') ##
## ^((?:[^:\\]+|\\.)*):(.*)