Find the first occurrence with Regex and Java

advertisements

I would like to be able to find the first occurrence of m² and then numbers in front of it, could be integers or decimal numbers. E.g. : "some text" 38 m² "some text" , "some text" 48,8 m² "some text", "some text" 48 m² "some text", etc..

What I have so far is:

\d\d,\d\s*(\m\u00B2)|\d\d\s*(\m\u00B2)

This right now finds all occurrences, although I guess it could be fixed with findFirst(). Any ideas how to improve the Regex part?


To get the first match, you just need to use Matcher#find() inside an if block:

String rx = "\\d+(?:,\\d+)?\\s*m\\u00B2";
Pattern p = Pattern.compile(rx);
Matcher matcher = p.matcher("E.g. : 4668,68 m² some text, some text 48 m²  etc");
if (matcher.find()){
    System.out.println(matcher.group());
}

See IDEONE demo

Note that you can get rid of the alternation group using an optional non-capturing group (?:..)?

Pattern breakdown:

  • \d+ - 1+ digits
  • (?:,\d+)? - 0+ sequences of a comma followed with 1+ digits
  • \s* - 0+ whitespace symbols
  • m\u00B2 - m2.