VerbalExpressions / JavaVerbalExpressions

Java regular expressions made easy.
MIT License
2.62k stars 243 forks source link

anyOf is not matched requirements #59

Open dawnbreaks opened 7 years ago

dawnbreaks commented 7 years ago

How can JavaVerbalExpressions build a simple regex like this: [\d,]+

VerbalExpression.regex().anyOf("0123456789,").oneOrMore().build()

It 's too ugly! How about this one: [a-k\s\d,]+ ?

It would be nice to add a anyOf method that can used like this:

VerbalExpression.regex().anyOf(DigitCharSet, WordCharSet, SpaceCharSet ,";:,\\").oneOrMore().build()
lanwen commented 7 years ago

Can't see why your variant better than original

dawnbreaks commented 7 years ago

@lanwen It 's ridiculous to list all the Word char and all digit char in the sring parameter in the anyOf method.

lanwen commented 7 years ago

lib already has .wordChar().nonWordChar().space().nonSpace().digit().nonDigit()

use with .capture().endCapture() - is it solve your case?

dawnbreaks commented 7 years ago

No. Please tell me how to use verbalExpressions to represent this regex: [a-k\s\d,]+

lanwen commented 7 years ago

regex().add("[").wordChar().space().digit().add("]").oneOrMore()

regex().anyOf("\\w\\s\\d")

regex().capture().digit().or("\\w").or("\\s").endCapture().oneOrMore()

regex().add("[a-k\s\d,]+")

You can use raw regex if it looks more compact

dawnbreaks commented 7 years ago

I think java regex is more readable than verbal expressions. VE is too awkward to use it.

lanwen commented 7 years ago

In some cases it's true! VE is mostly for those who don't know how to type simple regex. Or where you should write something that should be human-readable (for example in tests).

eduardohmg commented 7 years ago

It's some late, but I think with an indentation it can be better:

.add("[")
.wordChar().space().digit()
.add("]")
.oneOrMore()

You are right, sometimes regex is better than ve, principally for those who know regex enough. But we have a lot of thing to improve our code, whatever we use.