Solved

Regular expression

Posted on 2004-04-19
15
296 Views
Last Modified: 2010-03-31
Can you help me with this regular expression? It should match strings with:

- Characters a-z and -
- String size 1 - 10

Like this ^[a-z-]{1,10}$

But it should not match, if the string contains only the character -
How can I stop this?

/ TK
0
Comment
Question by:Magic55
  • 7
  • 5
  • 2
  • +1
15 Comments
 
LVL 30

Expert Comment

by:mayankeagle
Comment Utility
[a-z]*[[a-z-]+]*{1,10}

Very wild guess ;-)
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
Try

^[a-z]+\\-*|\\-*[a-z]+|[a-z]+\\-*{1,10}$
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
Sorry - that should have been

"^[a-z]+-*[a-z]+|-*[a-z]+|[a-z]+-*{1,10}$";
0
 
LVL 4

Author Comment

by:Magic55
Comment Utility
CEHJ and mayankeagle none of your suggestions worked.
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
The last one i posted works fine for me given your specification
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
Here's the output (true and false indicate a match)

C:\java\dumpit>jr Base ---jka
true

C:\java\dumpit>jr Base ---
false

C:\java\dumpit>jr Base a-s
true

C:\java\dumpit>jr Base a-
true

C:\java\dumpit>jr Base -
false
0
 
LVL 4

Author Comment

by:Magic55
Comment Utility
strings longer than 10 is true

test
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

everyting else work

/ TK
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 86

Assisted Solution

by:CEHJ
CEHJ earned 25 total points
Comment Utility
Yes - you're right! Kludge it:

int length = s.length();
if (length >= 1 && length <= 10 && s.matches(RE)) {
    // do it
}
0
 
LVL 4

Author Comment

by:Magic55
Comment Utility
The string length check has to be in the regular expression. (It's a part of a much larger expression)
/ TK
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
Why?
0
 
LVL 4

Author Comment

by:Magic55
Comment Utility
The actual string that I test look like this
part1.part2.part3 or part1.part3

Part 1 must match the regular expression described in the question.
Then I will put it in a larger expression which also check part 2 and 3

/ TK
0
 
LVL 2

Accepted Solution

by:
timbauer earned 25 total points
Comment Utility
If you can at all use CEHJ's suggestion, do it.
However, the language is regular and here is the brute force proof.
Let 'a' be the pattern [a-z]
Let 'b' ....                 [a-z-]?
abbbbbbbbbb UNION babbbbbbbbb UNION bbabbbbbbbb UNION  bbbabbbbbbb ... etc
The trick is using the "a" pattern to force an alphabetic character somewhere.
We provide all possible paddings of "b" around each end.

Therefore,
([a-z]([a-z]?){9})|((([a-z]?){1})[a-z](([a-z]?){8}))|((([a-z]?){2})[a-z](([a-z]?){7})) ........ (([a-z]?){9}[a-z])

The is going to produce the most god-awful DFA but, nor is it maintainable, but it will work.
Someone might be able to provide an observation to simplify things, but I cannot off hand.
Also if you know the precedence rules better, you may remove some of the redundant ( ).

Good luck.

0
 
LVL 2

Expert Comment

by:timbauer
Comment Utility
Forgot to mention, we allow the padding characters (the b's )
to be nullable. This allows us to accept strings < 10 characters.
0
 
LVL 4

Author Comment

by:Magic55
Comment Utility
timbauer, I thought of that solution but the problem is that the max size isn't really 10. I only used it in this example. The real max length is 63 which will give a very large expression, but as you said, it works.

I solved it with a separate length check as CEHJ suggested.
It isn't ideal in my application (it would be better if I got all in one expression), but it's better than a huge regular expression.

I will split the points ....

/ TK
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
8-)
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now