Amira
Amira

Reputation: 3270

Regular expression in java

I know it's a simple problem but i'm blocked on it : i want to retrieve all strings written in this form :

$F{ETIQX} 

Where X is a number. i wrote this regular expression but i'm getting errors :

 if (textField.getText().matches("$F{ETIQ\d}")){
  System.out.println("matches!!");
 }

Any help will be appreciated.

Upvotes: 0

Views: 45

Answers (2)

fge
fge

Reputation: 121702

i want to retrieve all strings

Then you shouldn't be using .matches() in the first place. but a Matcher and .find(). .matches() is a misnomer. It will succeed only if the whole input matches the regex (in contradiction with the definiton of regex matching which can occur anywhere in the input).

Also, your regex should be:

"\\$F\\{ETIQ\\d\\}"

(you need to escape backslashes in a Java string)

$, { and } are regex metacharacters; the first is an anchor matching the end of input, the two latter are bounds for a repetition quantifier.

Your code should read:

private static final Pattern PATTERN = Pattern.compile("\\$F\\{ETIQ\\d\\}");

// ...

final Matcher m = PATTERN.matcher(textField.getText());

while (m.find())
    // work with m.group()

Upvotes: 3

aelor
aelor

Reputation: 11116

\$F\{ETIQ\d\}

escape character which have meaning in regex.

$ means end of string
{ means start of a quantifier
} means end of a quantifier

for matching these you must escape them to match them literally.

here is a demo http://regex101.com/r/xT4mR6

In java \ has no meaning and will throuw an error , so we need to escape \ with \.

Upvotes: 1

Related Questions