Lets say I have a string "lore epsum dimsum ${ITEM_NAME} wonton kimchi"
.
I have created a regex that can extract ${ITEM_NAME}
from anywhere in the string. That regex is, .{(.*.*)}
.
How can I customize this regex to extract just the string between ${}
which is ITEM_NAME
?
CodePudding user response:
With {(.*.*)}
pattern, you extract any substrings between the leftmost {
and rightmost }
.
You need
\$\{([^{}]*)\}
In Java:
String regex = "\\$\\{([^{}]*)\\}";
See the regex demo.
If there is an explicit requirement to only match alphanumeric/underscore chars inside ${...}
, you can replace [^{}]*
with \w
/ \w*
pattern (doubling the backslashes in Java string literal).
See the Java demo:
import java.util.*;
import java.util.regex.*;
class Test
{
public static void main (String[] args) throws java.lang.Exception
{
String text = "lore epsum dimsum ${ITEM_NAME} wonton kimchi ${ITEM_NAME_2}";
Pattern p = Pattern.compile("\\$\\{([^{}]*)}");
Matcher m = p.matcher(text);
List<String> res = new ArrayList<>();
while(m.find()) {
res.add(m.group(1));
}
System.out.println(res);
}
}
Output:
[ITEM_NAME, ITEM_NAME_2]