|
Home > Archive > Unix questions > February 2004 > Regular Expression Help Needed
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Regular Expression Help Needed
|
|
| Deja User 2004-02-11, 2:36 am |
| 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 2004-02-11, 3:36 am |
| 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
| |
| Bruce Hartweg 2004-02-11, 4:36 am |
|
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 2004-02-12, 1:36 am |
| 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 2004-02-12, 1:36 am |
| 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
| |
| Bruce Hartweg 2004-02-12, 4:36 am |
|
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
| |
| Programmer Dude 2004-02-12, 4:36 am |
| 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 |
|_______________________________________
______|_______________________|
| |
| Barry Margolin 2004-02-12, 4:36 am |
| 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 2004-02-12, 11:34 am |
| 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
| |
| Deja User 2004-02-13, 4:35 am |
| Thanks for very detailed explanation... There is a 3rd party
application I am using that filters out unwanted lines. It uses GNU
regular expression engine.
|
|
|
|
|