Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Perl Misc (http://www.velocityreviews.com/forums/f67-perl-misc.html)
-   -   Regular Expression Help Needed (http://www.velocityreviews.com/forums/t885140-regular-expression-help-needed.html)

Deja User 02-11-2004 04:13 PM

Regular Expression Help Needed
 
I am new to regular expressions and I can't seem to figure out
following.

(1) Regular expression should find a match, if the given string does
NOT start with 90, 91, 31, or 32.

(2) Find a match, if the string contains DNI or 'DO NOT INSTALL'
anywhere in the string.

I need two seperate expressions for (1) and (2).

Thanks

Gunnar Hjalmarsson 02-11-2004 04:14 PM

Re: Regular Expression Help Needed
 
Didn't you find any further newsgroups where you could post your
homework questions?

Deja User wrote:
> I am new to regular expressions and I can't seem to figure out
> following.
>
> (1) Regular expression should find a match, if the given string
> does NOT start with 90, 91, 31, or 32.
>
> (2) Find a match, if the string contains DNI or 'DO NOT INSTALL'
> anywhere in the string.
>
> I need two seperate expressions for (1) and (2).


What have you tried so far?

--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl


Paul Lalli 02-11-2004 04:16 PM

Re: Regular Expression Help Needed
 
> Date: 11 Feb 2004 08:13:13 -0800
> From: Deja User <dejauser@safe-mail.net>
> Newsgroups: comp.lang.perl.misc, comp.lang.tcl, comp.unix.questions, alt.php,
> comp.programming
> Subject: Regular Expression Help Needed
>
> I am new to regular expressions and I can't seem to figure out
> following.
>
> (1) Regular expression should find a match, if the given string does
> NOT start with 90, 91, 31, or 32.
>
> (2) Find a match, if the string contains DNI or 'DO NOT INSTALL'
> anywhere in the string.
>
> I need two seperate expressions for (1) and (2).
>
> Thanks
>


Well, I have no idea what all those other groups will give you, but here
you'll get a perl answer. And btw, this sounds suspciously like a
homework question.... naughty naughty.

$string !~ /^(90|91|31|32)/

$string =~ /(DNI|DO NOT INSTALL)/

Paul Lalli

Bruce Hartweg 02-11-2004 05:27 PM

Re: Regular Expression Help Needed
 


Deja User wrote:

> I am new to regular expressions and I can't seem to figure out
> following.
>

this will help learn about REs

http://www.tcl.tk/man/tcl8.4/TclCmd/re_syntax.htm
> (1) Regular expression should find a match, if the given string does
> NOT start with 90, 91, 31, or 32.
>

a negative lookahead constraint is what you want:

http://www.tcl.tk/man/tcl8.4/TclCmd/re_syntax.htm#M26

regexp {^(?!(90|91|31|32))} $input

> (2) Find a match, if the string contains DNI or 'DO NOT INSTALL'
> anywhere in the string.
>

this is simple alternation

regexp {DNI|NO NOT INSTALL} $input


> I need two seperate expressions for (1) and (2).
>
> Thanks


Bruce


Deja User 02-12-2004 02:58 PM

Re: Regular Expression Help Needed
 
Thanks for the help. Just to clear things up, this is NOT a homework
question.. I already graduated from collge in 94. I am just new to
regular expressions. I already did some research on the web and read
some tutorials.. but still having trouble.

Deja User 02-12-2004 03:02 PM

Re: Regular Expression Help Needed
 
Here is my input and I am testing it in UltraEdit.. but your
suggestions don't seem to work. Am I doing anything wrong? I was
hoping that UltraEdit would highlight the matched lines.

INPUT
-----

32000806-001
91000883-xxx
64000343-394
20032043-001
31091003-003
90384334-092
10903103-033
20932002-934
This is my cat
cat is good
Test Point, DNI
TP, DO NOT INSTALL
DNI
34000000-343

Programmer Dude 02-12-2004 05:30 PM

Re: Regular Expression Help Needed
 
Deja User wrote:

> I am new to regular expressions and I can't seem to figure out
> following.
>
> (1) Regular expression should find a match, if the given string
> does NOT start with 90, 91, 31, or 32.


A pity about that "NOT". To find strings that match, you can just
do:
^((3[12])|(9[01])).*$

This is worth exploring if you're not too familiar with REs.

^((3[12])|(9[01])).*$ - the whole thing
^ - anchors RE to start of line
( ) - groups the two possible sub-patterns
( )|( ) - sub-pattern A *OR* sub-pattern B
3[12] - a "3" followed by a "1" or "2"
9[10] - a "9" followed by a "0" or "1"
.* - anything (i.e. rest of the line)
$ - anchors RE to end of line

NOTE: some systems require you to escape the grouping parentheses
and the "either/or" delimiter:

^\(\(3[12]\)\|\(9[01]\)\).*$

But the combination of the NOT and the double-digit prefixes makes
it a little harder. Something like this, perhaps:

^((9[^01])|(3[^12])|[^39]).*$

Broken out a bit:

^( (9[^01]) | (3[^12]) | [^39] ) .* $

This works by allowing lines that don't match.

^((9[^01])|(3[^12])|[^39]).*$ -
^( | | ).*$ - SOL, prefix, rest of line, EOL
(9[^01]) - "9" + NOT "0" or "1"
(3[^12]) - "3" + NOT "1" or "2"
[^39] - anything BUT NOT "3" or "9"

> (2) Find a match, if the string contains DNI or 'DO NOT INSTALL'
> anywhere in the string.


Easy:
(DNI)|(DO NOT INSTALL)


--
|_ CJSonnack <Chris@Sonnack.com> _____________| How's my programming? |
|_ http://www.Sonnack.com/ ___________________| Call: 1-800-DEV-NULL |
|_____________________________________________|___ ____________________|

Bruce Hartweg 02-12-2004 05:48 PM

Re: Regular Expression Help Needed
 


Deja User wrote:
> Here is my input and I am testing it in UltraEdit.. but your
> suggestions don't seem to work. Am I doing anything wrong? I was
> hoping that UltraEdit would highlight the matched lines.
>
> INPUT
> -----
>
> 32000806-001
> 91000883-xxx
> 64000343-394
> 20032043-001
> 31091003-003
> 90384334-092
> 10903103-033
> 20932002-934
> This is my cat
> cat is good
> Test Point, DNI
> TP, DO NOT INSTALL
> DNI
> 34000000-343


There was a typo in the 2nd RE (had NO instead of DO) but other than that
the REs work (run the following:)

set RE1 {^(?!(90|91|31|32))}
set RE2 {DNI|DO NOT INSTALL}

set input {
32000806-001
91000883-xxx
64000343-394
20032043-001
31091003-003
90384334-092
10903103-033
20932002-934
This is my cat
cat is good
Test Point, DNI
TP, DO NOT INSTALL
DNI
34000000-343
}

foreach line [split $data \n] {
puts "Checking >> $line << :"
if {[regexp $RE1 $line]} {puts " Does NOT start with 90,91,31 or 32"}
if {[regexp $RE2 $line]} {puts " Contains DNI or DO NOT INSTALL"}
puts ""
}

Note that this is Tcl (since thats the newsgroup I read your question on)
and I don;t know Ultraedit, so the RE syntax could be slightly different
(as well as supoort for negative lookaheads) - so either the REs need
tweaked for Ultraedit, or there is something else in the settings beyaond
the RE for UltraEdit to highlight.

Bruce


Barry Margolin 02-12-2004 06:09 PM

Re: Regular Expression Help Needed
 
In article <ba74bae9.0402120702.99c5bdb@posting.google.com> ,
dejauser@safe-mail.net (Deja User) wrote:

> Here is my input and I am testing it in UltraEdit.. but your
> suggestions don't seem to work. Am I doing anything wrong? I was
> hoping that UltraEdit would highlight the matched lines.


Different programs use different regular expression matchers, and they
often have different advanced features. I believe the suggestions were
intended for TCL, since you cross-posted to comp.lang.tcl.

Which language are you really planning to use? Post just to that group,
and you should get an answer most appropriate to your needs.

--
Barry Margolin, barmar@alum.mit.edu
Arlington, MA
*** PLEASE post questions in newsgroups, not directly to me ***

John W. Krahn 02-13-2004 01:09 AM

Re: Regular Expression Help Needed
 
Deja User wrote:
>
> Thanks for the help. Just to clear things up, this is NOT a homework
> question.. I already graduated from collge in 94. I am just new to
> regular expressions. I already did some research on the web and read
> some tutorials.. but still having trouble.


Your best bet is to get the book Mastering Regular Expressions.
http://www.oreilly.com/catalog/regex2/index.html


John
--
use Perl;
program
fulfillment


All times are GMT. The time now is 04:54 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.