Reputation: 363
I'm trying to write a regular expression that matches all the following given pattern examples -
1) Name=John!Age=25!Gender=M
2) Name=John!Name2=Sam!Name3=Josh
3) Name=John!Name2=Sam!Name3=Josh!
Basically there has to be an equals to sign between two words or numbers followed by an exclamatory and then the pattern repeats. the pattern can only end with an exclamatory or any alphabets or numbers or spaces but not the 'equals' sign or any other special characters
So these examples should not be matched -
1) Name!John=Name2+Sam=
2) Name=John=
3) Name=John!!
4) Name=John-
I'm very new to regular expressions and I just learnt a few basic things and I have this following regular expression written so far which doesn't fully satisfy my requirement ((?:\w+|=)*)!
I'm still trying to modify my regular expression to match my requirement, any help/guidance will be very helpful.
Upvotes: 0
Views: 355
Reputation: 163477
You can use
^(?:\w+=\w+!)*\w+=\w+!?$
In Java
String regex = "^(?:\\w+=\\w+!)*\\w+=\\w+!?$";
The pattern matches:
^
Start of string(?:\w+=\w+!)*
Optionally repeat 1+ word chars =
1+ word chars and !
\w+=\w+!?
Match 1+ word chars =
1+ word chars and optional !
$
End of stringString[] strings = {
"Name=John!Age=25!Gender=M",
"Name=John!Name2=Sam!Name3=Josh",
"Name=John!Name2=Sam!Name3=Josh!",
"N=J!A=25!",
"a=ba=b",
"Name!John=Name2+Sam=",
"Name=John=",
"Name=John!!",
"Name=John-"
};
for (String s : strings) {
if (s.matches("(?:\\w+=\\w+!)*\\w+=\\w+!?")) {
System.out.println("Match: " + s);
} else {
System.out.println("No match: " + s);
}
}
Output
Match: Name=John!Age=25!Gender=M
Match: Name=John!Name2=Sam!Name3=Josh
Match: Name=John!Name2=Sam!Name3=Josh!
Match: N=J!A=25!
No match: a=ba=b
No match: Name!John=Name2+Sam=
No match: Name=John=
No match: Name=John!!
No match: Name=John-
Upvotes: 1