"Eurospace Szarindar" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Hi, > > I tried to write a script to extrat data from the given DATA but I can find > the right regular expression to do that.
Hi Szarindar, Firstly why are you using this format and trying to parse it yourself? If you've got control of your data, use something like Text::CSV. The guy who maintains your code will thank you for it. otherwise, this seems to work (you'll have to print with $2 though)... /(['"])(((''|"")|[^'"])*?)\1(\s|$)/g HTH Rob Anderson > RULE: I need to catch everything between quotes (single or double) and if > inside exists a repeated quote (single or double) it is not seen as end of > the match. > > #!/usr/bin/perl -w > > use strict; > > my $begin = '[\",\']'; # > my $end = '[\",\']'; # > my $pattern = "${begin}(.*?)${end}" > > while (<DATA>) { > print "line content $_ \n" > while ( /$pattern/g ){ > print "line $. found : $1\n" > } > > } > > > __DATA__ > ' data11 '' data12' 'data13' > " data21 "" data22" "data23" > " data31 '' data32" "" "data34" > "data41" "data42" "data43" "__--data44" > """" "''" '""' '''' > > > > Result should be > 1:( data11 '' data12) > 2:(data13) > 3:( data21 "" data22) > 4:(data23) > 5:(data31 '' data32) > 6:() > 7:(data34) > 8:(data41) > 9:(data42) > 10:(data43) > 11:(__--data44) > 12:("") > 13:('') > 14:("") > 15:('') > > > It could be resolved by replacing the \"{2} or \'{2} by a "[EMAIL PROTECTED]" and > alterwards relacing it back to the previous value but it is not very smart. > > > > great thanks in advance > > Michel -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]