使用Regex和Java查找第一个匹配项

Nov*_*ice 7 java regex

我希望能够找到第一次出现的m²,然后在它前面的数字,可以是整数或十进制数. 例如

"一些文字"38m²"一些文字",

"一些文字"48,8平方米"一些文字",

"一些文字"48m²"一些文字"等.

到目前为止我所拥有的是:

\d\d,\d\s*(\m\u00B2)|\d\d\s*(\m\u00B2)
Run Code Online (Sandbox Code Playgroud)

这个现在找到所有出现,虽然我想它可以修复findFirst().有任何想法如何改进正则表达式部分?

Wik*_*żew 6

要获得第一个匹配项,您只需要Matcher#find()在一个if块内使用:

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());
}
Run Code Online (Sandbox Code Playgroud)

IDEONE演示

请注意,您可以使用可选的非捕获组摆脱备用组 (?:..)?

模式细分:

  • \d+ -1个以上的数字
  • (?:,\d+)? -0+个逗号序列,后跟1+个数字
  • \s* -0+空格符号
  • m\u00B2 -平方米