Issue
I have an input string like:
abc(123:456),def(135.666:3434.777),ghi("2015-06-07T09:01:05":"2015-07-08")
Basically, it is (naive idea with regex):
[a-zA-Z0-9]+(((number)|(quoted datetime)):((number)|(quoted datetime)))(,[a-zA-Z0-9]+(((number)|(quoted datetime)):((number)|(quoted datetime))))+?
How can I make a regex pattern in Java to validate that the input string follows this pattern and then I can extract the values [a-zA-Z0-9]+
and ((number)|(quoted datetime)):((number)|(quoted datetime))
from them?
Solution
You can use
(\w+)\((\d+(?:\.\d+)?|\"[^\"]*\"):(\d+(?:\.\d+)?|\"[^\"]*\")\)
See the regex demo.
In Java, it can be declared as:
String regex = "(\\w+)\\((\\d+(?:\\.\\d+)?|\"[^\"]*\"):(\\d+(?:\\.\\d+)?|\"[^\"]*\")\\)";
Details:
(\w+)
- Group 1: one or more word chars\(
- a(
char(\d+(?:\.\d+)?|\"[^\"]*\")
- Group 2: one or more digits optionally followed with.
and one or more digits, or"
, zero or more chars other than"
and then a"
char:
- a colon(\d+(?:\.\d+)?|\"[^\"]*\")
- Group 3: one or more digits optionally followed with.
and one or more digits, or"
, zero or more chars other than"
and then a"
char\)
- a)
char
Answered By - Wiktor Stribiżew
Answer Checked By - Clifford M. (JavaFixing Volunteer)