Java 正则匹配连贯的数字

在我们的日常编程工作中,经常会遇到需要从字符串中提取数字的情况。这些数字可能是任意长度的整数或小数,并且可能会包含正负号。在 Java 中,我们可以使用正则表达式来匹配并提取这些连贯的数字。本文将介绍如何使用 Java 的正则表达式来实现这个功能,并提供相应的代码示例。

正则表达式的基本概念

在深入讨论之前,我们先来了解一下正则表达式的基本概念。正则表达式是一种用于匹配字符串的模式。它由一些特殊字符和普通字符组成,可以用来描述字符的特征、位置和数量。在 Java 中,我们使用 java.util.regex 包提供的类来操作正则表达式。

匹配连贯的数字

要匹配连贯的数字,我们可以使用正则表达式 \d+(\.\d+)?。这个表达式由以下几个部分组成:

  • \d+:匹配一个或多个数字字符。
  • (\.\d+)?:可选匹配,用于匹配小数部分。其中 . 是一个特殊字符,需要使用 \. 进行转义。

下面是一个使用该正则表达式的示例代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NumberMatcher {
    public static void main(String[] args) {
        String input = "The price is $99.99";
        String regex = "\\d+(\\.\\d+)?";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);

        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

运行以上代码,输出结果为:

99.99

在上面的示例中,我们将正则表达式编译为一个 Pattern 对象,并使用该对象创建一个 Matcher 对象。然后,我们使用 find() 方法来查找匹配的部分,并使用 group() 方法来获取匹配的结果。

表格

为了更好地理解正则表达式中各个符号的含义,我们来看一个表格,其中列出了常用的正则表达式符号及其含义。

符号 含义
. 匹配任意字符(除了换行符)
^ 匹配行的开头
$ 匹配行的结尾
* 匹配前面的字符零次或多次
+ 匹配前面的字符一次或多次
? 匹配前面的字符零次或一次
\d 匹配任意数字字符
\w 匹配任意字母、数字或下划线字符
\s 匹配任意空白字符
[abc] 匹配字符 a、b 或 c
[^abc] 匹配除了字符 a、b 和 c 之外的任意字符
(abc) 匹配字符 abc
a\|b 匹配字符 a 或 b

甘特图

为了更好地展示正则表达式的匹配过程,我们可以使用甘特图。下面是使用 Mermaid 语法绘制的一个简单的甘特图示例:

gantt
    dateFormat  YYYY-MM-DD
    title 正则表达式匹配过程
    section 匹配过程
    正则表达式编译完成: done, 2022-01-01, 1d
    字符串匹配开始: done, 2022-01-02, 1d
    找到第一个匹配的数字: done, 2022-01-03, 1d
    输出第一个匹配结果: done, 2022-01-04, 1d
    找到下一个匹配的数字: done, 2022-01-05, 1d
    输出下一个匹配结果: done, 2022-01-06, 1d
    找到所有匹配的数字: done, 2022-