I know I can do this with a regex, but...

Ask a Question related to PERL Miscellaneous, Design and Development.

  1. #1

    Default I know I can do this with a regex, but...

    Need to strip comments from VBScript code.

    Tried to use a state machine to tell if I was in quotes, but got very
    confused. I know I can use a regex, although I may have to call it
    repeatedly to eat quoted strings. Anyone have ideas?

    I need to whack everything after the first comment character...

    this is not a comment
    'this line is fully commented
    the comment 'in this line starts after ' the word comment
    there "is no 'comment" in this line
    but in "this 'line" there 'is a "comment" before the word "is"
    'this line is "fully" commented

    ad infinitum...


    Tman Guest

  2. Similar Questions and Discussions

    1. Regex help
      I'd like to replace any html tags containing "< >" with a space. For example, <TR VALIGN=TOP>, I'd like to replace that with a space. Is there a...
    2. REGEX help pls
      in the regex buddy they are explaining: "Be careful when using the negated shorthands inside square brackets. is not the same as . The latter...
    3. Regex..
      Could some good samaritan help me out with this pls... I am trying to find a regular expression for the below string.. ExchangeName =...
    4. Need help with regex
      > I have a directory of files that I want to move to another directory.
    5. IP regex?
      Gareth Glaccum wrote: How about using m/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/ and testing $1 - $4 for compliance? Much cleaner. -- Cheers,
  3. #2

    Default Re: I know I can do this with a regex, but...

    Tman <nerdy1@snet.net> wrote in comp.lang.perl.misc:
    > Need to strip comments from VBScript code.
    >
    > Tried to use a state machine to tell if I was in quotes, but got very
    > confused. I know I can use a regex, although I may have to call it
    > repeatedly to eat quoted strings. Anyone have ideas?
    >
    > I need to whack everything after the first comment character...
    >
    > this is not a comment
    > 'this line is fully commented
    > the comment 'in this line starts after ' the word comment
    > there "is no 'comment" in this line
    > but in "this 'line" there 'is a "comment" before the word "is"
    > 'this line is "fully" commented
    Take a look at Regex::Common. It has elaborate regexes that deal
    with comments.

    Anno
    Anno Siegel Guest

  4. #3

    Default Re: I know I can do this with a regex, but...

    Anno Siegel (anno4000@lublin.zrz.tu-berlin.de) wrote on MMMDCLXX
    September MCMXCIII in <URL:news:bkbrds$o08$1@mamenchi.zrz.TU-Berlin.DE>:
    ^^ Tman <nerdy1@snet.net> wrote in comp.lang.perl.misc:
    ^^ > Need to strip comments from VBScript code.
    ^^ >
    ^^ > Tried to use a state machine to tell if I was in quotes, but got very
    ^^ > confused. I know I can use a regex, although I may have to call it
    ^^ > repeatedly to eat quoted strings. Anyone have ideas?
    ^^ >
    ^^ > I need to whack everything after the first comment character...
    ^^ >
    ^^ > this is not a comment
    ^^ > 'this line is fully commented
    ^^ > the comment 'in this line starts after ' the word comment
    ^^ > there "is no 'comment" in this line
    ^^ > but in "this 'line" there 'is a "comment" before the word "is"
    ^^ > 'this line is "fully" commented
    ^^
    ^^ Take a look at Regex::Common. It has elaborate regexes that deal
    ^^ with comments.


    But Regexp::Common will only give you patterns for comments - it
    doesn't include language parsers. All the patterns of Regexp::Common
    are context free - but for most languages the pattern for comments
    isn't context free (for instance, they can be included in literals).

    Having said that, if the only concern is double quoted strings,
    something like this might work (untested):

    use Regexp::Common;

    s [($RE{delimited}{-delim => '"'})|'.*\n]
    [$1 || ""]eg;


    Abigail
    --
    perl -weprint\<\<EOT\; -eJust -eanother -ePerl -eHacker -eEOT
    Abigail Guest

  5. #4

    Default Re: I know I can do this with a regex, but...

    On Thu, 18 Sep 2003 02:06:53 GMT, "Tman" <nerdy1@snet.net> wrote:
    >Need to strip comments from VBScript code.
    >
    >Tried to use a state machine to tell if I was in quotes, but got very
    >confused. I know I can use a regex, although I may have to call it
    >repeatedly to eat quoted strings. Anyone have ideas?
    >
    >I need to whack everything after the first comment character...
    The Perl FAQ gives a regex for doing this kind of splitting. However,
    as you're only concerned about breaking into two pieces, it might be
    easier to do it this way (if you don't care about efficiency).

    while (<DATA>){
    chomp;
    my $line = "";
    foreach( split // ){
    unless ( /"/ ... /"/ ){ last if /'/ }
    $line .= $_
    }
    print "$line\n" if $line;
    }

    __DATA__
    this is not a comment
    'this line is fully commented
    the comment 'in this line starts after ' the word comment
    there "is no 'comment" in this line
    but in "this 'line" there 'is a "comment" before the word "is"
    'this line is "fully" commented

    Phil

    --
    Ignore coming events if you wish to send me e-mail
    Philip Lees Guest

Posting Permissions

  • You may not post new threads
  • You may post replies
  • You may not post attachments
  • You may not edit your posts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139