http://qs321.pair.com?node_id=490614


in reply to Re: Need Regex help
in thread Need Regex help

So using this, how would he then get his five elements from the results? Seeing as how some of the elements are encased in {} if they contain spaces or |'s?
{error 1 1 {^E 0-20-9:0-50-9:0-50-9.*$} {^E 0-20-9:0-50-9:0-50-9.*$}} {three 1 1 {^.*35=A.*$|^.*35=5.*$} {^.*35=A.*$|^.*35=5.*$}} {fixv 1 1 ^.*VFIXFxProxy.*Disconnected ^.*VFIXFxProxy.*Disconnected}

Replies are listed 'Best First'.
Re^3: Need Regex help
by JediWizard (Deacon) on Sep 09, 2005 at 16:01 UTC

    #!/usr/local/bin/perl $re = qr@ \{( (?: (?> [^{}]+ ) # Non-{} without backtracking | (??{ $re }) # Group with matching {} )* )\} @x; my $string = 'value:patternList = "{error 1 1 {^E 0-20-9:0-50-9:0-50-9 +.*$} {^E 0-20-9:0-50-9:0-50-9.*$}} {three 1 1 {^.*35=A.*$|^.*35=5.*$} + {^.*35=A.*$|^.*35=5.*$}} {fixv 1 1 ^.*VFIXFxProxy.*Disconnected ^.*V +FIXFxProxy.*Disconnected}"'; my $count = 1; while($string =~ m/$re/g){ my $inst = $1; my(@elements) = ($inst =~ m/((?<={)[^}]+(?=})|[^\s{}]+)/g); print "Instance $count\'s elements = ".join("\n", @elements)." +\n\n\n"; $count++; } exit; __END__ Instance 1's elements = error 1 1 ^E 0-20-9:0-50-9:0-50-9.*$ ^E 0-20-9:0-50-9:0-50-9.*$ Instance 2's elements = three 1 1 ^.*35=A.*$|^.*35=5.*$ ^.*35=A.*$|^.*35=5.*$ Instance 3's elements = fixv 1 1 ^.*VFIXFxProxy.*Disconnected ^.*VFIXFxProxy.*Disconnected

    Update Removed unnessicary grouping paranethesis.


    They say that time changes things, but you actually have to change them yourself.

    —Andy Warhol