SPUG: SQL syntax Regular Expression take 2

Meryll Larkin humbaba9 at yahoo.com
Wed Jun 19 19:41:56 CDT 2002


6/19/02

Let me try that again:

$string =~ s/\Q$start\E.*?\Q$end\E//g;

will work, provided the comment begins and ends all on one line.

This is a better Regex and will handle comments that stretch to 
multiple lines:

$string =~ s/\Q$start\E([\S\s])*?\Q$end\E//g;


Meryll



--- Meryll Larkin <humbaba9 at yahoo.com> wrote:
> 6/19/02
> 
> Hi Josh, 
> 
> Here's some Regex that might be helpful:
> $` (dollarsign backtick) captures the string that matches before the
> Regex
> $' captures after the Regex
> \Q escapes special characters and makes the Regex treat them
> literally
> until it reaches a \E
> 
> print "testing comments\n";
> 
> my $string = qq| 
> <html>
> ...
> <!--  <a href="voo">voo</a>  -->
> Some stuff here
> <!--  <a href="roo">roo</a>  -->
> Other stuff here
> <!--  <a href="she">she</a>  -->
> <a href="and_a_link_here">Link</a>
> <!--  <a href="moo">moo</a>  -->
> 
> ...
> </html>
> 
> |;
> 
> my $start= "<!--";
> my $end = "-->";
> 
> if ( $string =~ /$start/ ) {
> 
>   print "string $string contains $start\n";
>   $string =~ s/\Q$start\E.*?\Q$end\E//g;
>   print "new string is $string\n";
> 
> } else {
> 
>   print "$start not found\n";
> 
> }
> 
> I hope this puts you on the right track.
> 
> Meryll Larkin
> 
> 
> 
> 
> 
> --- Josh Lanza <joshlanza at hotmail.com> wrote:
> > It's actually the sql WHERE clause that comes in to this process
> and
> > I need 
> > to do some validation on that string. So the string would come in
> > like this:
> > 
> > $sql = "title =   'fred's title'  ";
> > 
> > I need handle that string, and escape the tick in "fred's".
> > 
> > What I want to get at here is how to handle delimiters with regular
> 
> > expressions.  The same thing applies with markup parsing - I know
> > there are 
> > modules written to do this kind of work, but I'd like to know how,
> > for 
> > instance, to parse an HTML document and determine if a block of
> HTML
> > is 
> > commented out. I can see how this is done with byte by byte
> parsing,
> > but how 
> > is it done with regular expressions?
> > 
> > Example html doc:
> > 
> > <html>
> > ...
> > 
> > <!--  <a href="foo">foo</a>  -->
> > 
> > ...
> > </html>
> > 
> > 
> > When parsing this document, I could find the "a" tag with something
> > like 
> > (but more sophisticated than)
> > 
> > /<a href=[^>]+>/ig
> > 
> > However, I wouldn't know if the link were commented out. Is there a
> > way to 
> > do this with regular expressions?
> > 
> > 
> > 
> > >From: Creede Lambard <creede at penguinsinthenight.com>
> > >Reply-To: creede at penguinsinthenight.com
> > >To: Josh Lanza <joshlanza at hotmail.com>
> > >CC: spug-list at pm.org
> > >Subject: Re: SPUG: SQL syntax Regular Expression
> > >Date: Tue, 18 Jun 2002 21:35:31 -0700 (PDT)
> > >
> > >You might be able to get around this by using DBI:
> > >
> > >   use DBI;
> > >   my $dbh = DBI->connect('my_db', $username, $auth);
> > >   my $sth = $dbh->prepare("select * from tbl_1 where field_1 =
> ?");
> > >   $sth->execute("bob's value");
> > >
> > >and so on.
> > >
> > >If you're in a position where you CAN'T use DBI you might be able
> to
> > do 
> > >something
> > >like
> > >
> > >   my $name = "bob's value";
> > >      $name = normalize($name);
> > >   my $sql = "select * from tbl_1 where field_1 = '$name'";
> > >
> > >   sub normalize { my $word = shift; $word =~ s/'/''/g; return
> > $word; }
> > >
> > >You want the 'g' in there just in case your parameter has more
> than
> > one
> > >apostrophe ("O'Brien's Deli"). Others more wise in the way of SQL
> > might be
> > >able to say whether there are other ramifications you need to be
> > aware of.
> > >
> > >On Wed, 19 Jun 2002, Josh Lanza wrote:
> > >
> > > > Hi,
> > > >
> > > > I need to create a regexp to validate and correct apostrophe
> > characters
> > > > in sql statements, and I left my Friedl book at home :(
> > > >
> > > > Example:
> > > >
> > > > $sql  = "select * from tbl_1 where field_1 = 'bob's value'";
> > > >
> > > > There is a tick (bob's) that is not escaped (should be bob''s).
> > > >
> > > > Is this something I can handle with regular expressions? The
> idea
> > of
> > > > crawling this string byte by byte seems a little distasteful
> ...
> > > >
> > > > TIA, Josh
> > > >
> > > >
> _________________________________________________________________
> > > > Join the world’s largest e-mail service with MSN Hotmail.
> > > > http://www.hotmail.com
> > > >
> > > >
> > > >  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> -
> > - - - - 
> > >-
> > > >      POST TO: spug-list at pm.org       PROBLEMS:
> > owner-spug-list at pm.org
> > > >       Subscriptions; Email to majordomo at pm.org:  ACTION  LIST 
> > EMAIL
> > > >   Replace ACTION by subscribe or unsubscribe, EMAIL by your 
> > >Email-address
> > > >  For daily traffic, use spug-list for LIST ;  for weekly, 
> > >spug-list-digest
> > > >      Seattle Perl Users Group (SPUG) Home Page:
> > http://seattleperl.org
> > > >
> > > >
> > >
> > >--
> > >  * .~. `( 
> > ---------------------------------------------------------
> > >` / V \  . Creede Lambard                : Never rush a miracle
> man.
> > >  /(   )\   creede at penguinsinthenight.com :  You get rotten
> > miracles.
> > >   ^^-^^   
> > ---------------------------------------------------------
> > >
> > >Perl Programmer and Linux Sysadmin, reasonable rates. Inquire
> > within.
> > >
> > 
> > 
> > 
> > 
> 
=== message truncated ===


__________________________________________________
Do You Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
      Subscriptions; Email to majordomo at pm.org:  ACTION  LIST  EMAIL
  Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
 For daily traffic, use spug-list for LIST ;  for weekly, spug-list-digest
     Seattle Perl Users Group (SPUG) Home Page: http://seattleperl.org




More information about the spug-list mailing list