4

I need to form a regular expression in order to check the outputs of a response log. The log file will always be different based on the input. Thus, I want to create a dynamic regular expression based on the input to the function. I may need to pass variable number of variables at a time for comparison, so how can that 'or' factor be inserted in the regex?

Is it possible to create such a regular expression in Java, and how should I go about it?

ashfaq
  • 77
  • 1
  • 9
  • 2
    Yes, it's possible. Just use string concatenation, though you'll probably want to escape the variable parts to be safe. – Matt Ball Apr 16 '12 at 10:57

2 Answers2

4

Yes, the regex is only a string, you can concatenate your user input to constant parts and then create a pattern from it.

If you want to match the user input literally, you should use Pattern.quote("UserString") to regex escape it.

Example:

String UserInput = "Bar()";
String Prefix = "Foo";

Pattern p = Pattern.compile(Prefix + Pattern.quote(UserInput));

String s1 = "FooBar()";
String s2 = "FooBarNo";

String[] s = { s1, s2};

for (String a : s) {
    Matcher m = p.matcher(a);
    if (m.find())
        System.out.println(a + " ==> Success");
    else
        System.out.println(a + " ==> Failure");
}

Output:

FooBar() ==> Success
FooBarNo ==> Failure

Community
  • 1
  • 1
stema
  • 90,351
  • 20
  • 107
  • 135
  • thanks for the reply, that was pretty easy stuff, but the main problem for me is that it is not necessary that each time I need to add the same number of variables ... sometimes it may be 4 and sometimes 6 or more ... what to do in that case ? – ashfaq Apr 16 '12 at 11:11
  • 2
    @ashfaq then you're going to have to edit your question to be more specific, because we're not mind readers. – Matt Ball Apr 16 '12 at 11:13
  • Thanks MДΓΓ БДLL, @ashfaq What about a loop where you add all the strings you want? – stema Apr 16 '12 at 11:19
  • @stema thanks for the snippet, very near to my need... i'll build upon it.:-) – ashfaq Apr 16 '12 at 11:24
0

I think you can do that by concatenating. e.g: "your regex" + "{" + input + "}".

Matthieu
  • 2,736
  • 4
  • 57
  • 87
HUNTER_X
  • 13
  • 4