1

In java I am trying to extract column names and their values using Regex and Matcher but dont know what I am doing wrong here.

    String sql = "INSERT INTO MyTable (column1, column2, column3, column4, column5 ) VALUES (1, 'Hi', 'A,B', '', null)";
    String pattern = "INSERT INTO.*((\\w)+).*\\((.*)\\).*VALUES.*\\((.*)\\)";

    Pattern r = Pattern.compile(pattern);

    Matcher m = r.matcher(sql);
    if (m.find()) {
        System.out.println("Found value: " + m.group(0));
        System.out.println("Found value: " + m.group(1));
        System.out.println("Found value: " + m.group(2));
    } else {
        System.out.println("NO MATCH");
    }

Expectation:

Group-1 = column1, column2, column3, column4, column5
Group-2 = 1, 'Hi', 'A,B', '', null
0

2 Answers 2

2

Don't use greedy .* in your regex. You can use this regex:

\bINSERT\s+INTO\s+\S+\s*\(([^)]+)\)\s*VALUES\s*\(([^)]+)\)

In Java:

String regex = "\\bINSERT\\s+INTO\\s+\\S+\\s*\\(([^)]+)\\)\\s*VALUES\\s*\\(([^)]+)\\)";

This will give:

Group 1: "column1, column2, column3, column4, column5 "
Group 2: "1, 'Hi', 'A,B', '', null"

RegEx Demo

Sign up to request clarification or add additional context in comments.

3 Comments

that's an even better answer than mine. I love the replacement of the greedy operator with 'match everything except back bracket
@anubhava Thanks! It worked. can you help me to extract the values separated by ','. I am having trouble when splitting values with ',' (comma) because one value itself has comma inside.
Hmm splitting value on comma but ignoring commas inside the quotes is not trivial problem. You see this and this
1

Try this

"INSERT INTO.*\\((.*)\\).*VALUES.*\\((.*)\\)"

The mistake you were doing is not escaping the brackets. Without the escaping \( Regex assumes you are starting a group.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.