in reply to Splitting string using two overlapping patterns

$line = 'Iteration {Applied Field} A {Total Energy} Mx F G {Third + test line}'; print "$&\n" while $line=~s/(?<={)[\w\s]+(?=})|\w+//; Iteration Applied Field A Total Energy Mx F G Third test line

Replies are listed 'Best First'.
Re^2: Splitting string using two overlapping patterns
by AnomalousMonk (Archbishop) on Oct 24, 2013 at 21:28 UTC
    print "$1\n" while $line=~s/(\w+\s+\w+|\w+)[}|\s+|\s+{]//;

    Metacharacters like  | are not meta-special in a character class, so  [}|\s+|\s+{] from the quoted regex is equivalent, with the pipe metacharacter explicitly escaped (for clarity), to  [\s{}\|] or, less verbosely, to the  [\s{}|] class. (In other words, there's no alternation in a character class.)

      noted.
      thank you
      I corrected my previous version,
      because it contained a serious mistake