import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?P<amount>-?\\d+(?:\\.\\d*)?)[^\\S\\n]*(?P<degrees>°|deg(?:rees?)?|in)?[^\\S\\n]*(?P<unit>c(?:(?=el[cs]ius\\b|entigrades?\\b|\\b))|f(?:(?=ahrenheit\\b|\\b))|k(?:(?=elvins?\\b|\\b)))";
final String string = "70 degrees celsius\n"
+ "70 degree fahrenheit\n"
+ "70 degrees c\n"
+ "70 degrees f\n"
+ "70 ° f\n"
+ "70 ° c\n"
+ "70°c\n"
+ "70°f\n"
+ "70 deg celsius\n"
+ "70 deg centigrade\n"
+ "70 deg fahrenheit\n"
+ "-30.5 in Kelvin\n"
+ "-30.5 degrees Kelvin\n"
+ "-30.5 Kelvin\n"
+ "70F\n"
+ "70C\n"
+ "70 c\n"
+ "70 f\n"
+ "70k\n"
+ "100 deg celcius\n\n"
+ "Oh, it seems I have an oven from Europe. If the recipe calls for 325 degrees fahrenheit and water boils at 100 centigrades, then... multiply, and... voila! Set your oven for 650 degrees celsius--that should make your cookies crispy-brown!\n\n"
+ "# Failures\n\n"
+ "70 degrees # too ambiguous\n"
+ "70 deg felsius # ensure we don't mix fahrenheit and celsius\n\n";
final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html