tags:

views:

71

answers:

4

I am using this pattern and matching a string.

String s = "//name:value /name:value";
if (s.matches("(//?\\s*\\w+:\\w+\\s*)+")) {
  // it fits
}

This works properly.
But if I want to have a string like "/name-or-address:value/name-or-address:value" which has this '-' in second part, it doesn't work.
I am using \w to match A-Za-z_, but how can I include - in that?

+4  A: 

Use [\w-] to combine both \w and -.

Note that - should always be at the beginning or end of a character class, otherwise it will be interpreted as defining a range of characters (for instance, [a-z] is the range of characters from a to z, whereas [az-] is the three characters a,z,and-).

Amber
A: 

I don't know if it answers your question but why not replacing \w+ with (\w|-)+ or [\w-]+ ?

PierrOz
No reason to use a group and or operator here - character classes should be defined using `[]`, not OR's.
Amber
A: 

[-\w] (Or in a string, [-\\w].)

Ignacio Vazquez-Abrams
A: 

How about

 if (s.matches("/(/|\\w|-|:\\w)+")) {
ring bearer