in reply to Is there a way I can substitute for ":" except when it is preceded by a letter C

Or if the phrase "negative lookbehind assertion" fills you with dread ...

my $string = 'Engine4.2.0.5:prefix=PDE:path=C:\h\COE\COMP\PDE:status=installed:vers +ionNumber=4.2.0.5:type=SOFTWARE-COE:'; $string =~ s/([^C]):/$1'/g;

...will do it too.

Update: ...almost:( See Tachon's post below for how to do it properly {sigh}.

It reads; capture any single non-"C" char followed by a ":" and replace both by the captured char ($1) and the "'".


What's this about a "crooked mitre"? I'm good at woodwork!
  • Comment on Re: Is there a way I can substitute for ":" except when it is preceded by a letter C
  • Download Code

Replies are listed 'Best First'.
Re: Re: Is there a way I can substitute for ":" except when it is preceded by a letter C
by tachyon (Chancellor) on Aug 17, 2002 at 01:19 UTC

    But what if the string is ':foo'?

    s/([^C:]*):/$1'/g;

    cheers

    tachyon

    s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

      That's not quite right, the * makes it match even if there's 0 C's, turning all colons into apostrophes, not just the intended ones
      s/(^|[^C]):/$1'/g
      fixes that, but won't work if there is multiple colons in a row. A negative lookbehind is probably the only way to do this properly.

      --MrNobo1024
      s]]HrLfbfe|EbBibmv]e|s}w}ciZx^RYhL}e^print