http://www.perlmonks.org?node_id=486179


in reply to how to find what's not there with a regex?

How about this:

#! /usr/bin/perl use strict; use warnings; while (<DATA>) { chomp; print "[$_]\n" for /\s*([^=]+\s+=\s+'[^']+'|\S+\s+=(?:\s+[^=]+)+(?:( +?=\s+\S+\s+=)|$))/msg; } __DATA__ xyz = 'some long exp' xyz = some long exp with no more than one +space separating parts a = b c d = e drsubc = agauss(0, 1, 3) delm1 = '0 + 0.045u*distm1' + delm2 = '0 + 0.07u*distm2' delm3 = '0 + 0.07u*distm3' + delm4 = '0 + 0.07u*distm4' delmt = '0 + + 0.07u*distmt' delml = '0.16u + 0.43u*distml' + delam = '0.32u + 0.86u*distam' dele1 = '0 + 0.2 +5u*diste1' dele2 = '0 + 0.25u*diste2' + delma = '0.16u + 0.6u*distma' pmsxt = 'npmsxt + 12.5 +u*dpmsxt' tih = 0.35u capct = '0.50u + + 0.13u*xdcapct' capcti = '0.55u + 0.13u*xdcapct' + m1t = '0.41u + 0.05u*xdm1t' m1ti = '0.36u + 0.05u*xdm1t' + m2t = '0.48u + 0.057u*dm2t' m3t = '0.4 +8u + 0.057u*dm3t' m4t = '0.48u + 0.057u*dm4t' + mtt = '0.48u + 0.057u*dmtt' qtt = '0.242u + +0.0202u*dqtt' htt = '0.242u + 0.0202u*dhtt' m +lt = '2.0u + 0.2u*dmlt' amt = '4.0u + 0.4u*dam +t' e1t = '3.0u + 0.5u*de1t' e2t = ' +4.0u + 0.5u*xde1mat' mat = '4.0u + 0.4u*dmat' + m1m2t = '0.35u + 0.05u*dm1m2t'
Generates the output:
[xyz = 'some long exp'] [xyz = some long exp with no more than one space separating parts] [a = b c] [d = e] [drsubc = agauss(0, 1, 3) ] [delm1 = '0 + 0.045u*distm1'] [delm2 = '0 + 0.07u*distm2'] [delm3 = '0 + 0.07u*distm3'] [delm4 = '0 + 0.07u*distm4'] [delmt = '0 + 0.07u*distmt'] [delml = '0.16u + 0.43u*distml'] [delam = '0.32u + 0.86u*distam'] [dele1 = '0 + 0.25u*diste1'] [dele2 = '0 + 0.25u*diste2'] [delma = '0.16u + 0.6u*distma'] [pmsxt = 'npmsxt + 12.5u*dpmsxt'] [tih = 0.35u ] [capct = '0.50u + 0.13u*xdcapct'] [capcti = '0.55u + 0.13u*xdcapct'] [m1t = '0.41u + 0.05u*xdm1t'] [m1ti = '0.36u + 0.05u*xdm1t'] [m2t = '0.48u + 0.057u*dm2t'] [m3t = '0.48u + 0.057u*dm3t'] [m4t = '0.48u + 0.057u*dm4t'] [mtt = '0.48u + 0.057u*dmtt'] [qtt = '0.242u + 0.0202u*dqtt'] [htt = '0.242u + 0.0202u*dhtt'] [mlt = '2.0u + 0.2u*dmlt'] [amt = '4.0u + 0.4u*damt'] [e1t = '3.0u + 0.5u*de1t'] [e2t = '4.0u + 0.5u*xde1mat'] [mat = '4.0u + 0.4u*dmat'] [m1m2t = '0.35u + 0.05u*dm1m2t']



pbeckingham - typist, perishable vertebrate.

Replies are listed 'Best First'.
Re^2: how to find what's not there with a regex?
by samizdat (Vicar) on Aug 24, 2005 at 13:51 UTC
    Almost. I think you're on the right track, because your solution's caught all but drsubc and tih correctly. Let me study what you've done, and thanks very much!

      Fixed the drsubc and tih.



      pbeckingham - typist, perishable vertebrate.