SPUG: SQL syntax Regular Expression

Meryll Larkin humbaba9 at yahoo.com
Wed Jun 19 18:58:31 CDT 2002


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.
> >
> 
> 
> 
> 
> _________________________________________________________________
> Send and receive Hotmail on your mobile device: http://mobile.msn.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
> 


__________________________________________________
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