Solved

Regular expression

Posted on 2004-04-19
15
298 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:Mayank S
ID: 10858324
[a-z]*[[a-z-]+]*{1,10}

Very wild guess ;-)
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10858333
Try

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

Expert Comment

by:CEHJ
ID: 10858336
Sorry - that should have been

"^[a-z]+-*[a-z]+|-*[a-z]+|[a-z]+-*{1,10}$";
0
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 
LVL 4

Author Comment

by:Magic55
ID: 10858471
CEHJ and mayankeagle none of your suggestions worked.
0
 
LVL 86

Expert Comment

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

Expert Comment

by:CEHJ
ID: 10858512
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
ID: 10858596
strings longer than 10 is true

test
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

everyting else work

/ TK
0
 
LVL 86

Assisted Solution

by:CEHJ
CEHJ earned 25 total points
ID: 10858670
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
ID: 10858685
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
ID: 10858708
Why?
0
 
LVL 4

Author Comment

by:Magic55
ID: 10858806
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
ID: 10863933
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
ID: 10863953
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
ID: 10866758
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
ID: 10866778
8-)
0

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Configure a Bean in an XML file 4 32
Android development question 2 37
How to determine if a string is a valid SHA value 7 34
printf performancy 11 43
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
Viewers will learn about arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Boole…
The viewer will learn how to implement Singleton Design Pattern in Java.

809 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