首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 正則表達式實戰:從字串中提取數字完整指南

     編輯:Java 綜合教學

核心代碼範例

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

public class RegexDemo {
    public static void main(String[] args) {
        String input = "This order was placed for QT3000! OK?";
        String regex = "\\d+";  // 匹配一個或多個連續數字

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

        if (matcher.find()) {
            System.out.println("找到數字: " + matcher.group()); // 輸出: 3000
        } else {
            System.out.println("未找到數字");
        }
    }
}

關鍵 API 解析

類/方法說明
Pattern.compile(String)編譯正則為不可變 Pattern 物件,執行緒安全,可複用。
pattern.matcher(CharSequence)建立 Matcher,綁定輸入字串,執行緒不安全,勿共用。
matcher.find()尋找下一個匹配的子序列,返回 boolean。
matcher.group()返回上一次匹配的完整字串。
matcher.group(int)返回指定捕獲組內容(組 0 為整體)。
matcher.start()/end()返回匹配區間在輸入字串中的起止索引。
matcher.replaceAll(String)替換所有匹配為指定字串。

常用正則元字元速查表

元字元說明範例
^行首^Hello
$行尾World$
.任意單字元(除換行)a.c 匹配 abc, axc
[abc]字元集合:a 或 b 或 c[aeiou] 元音
[^abc]排除字元集合[^0-9] 非數字
\d數字 [0-9]\d{4} 4位數字
\D非數字 [^0-9]
\w單字字元 [a-zA-Z0-9_]
\W非單字字元
\s空白 [\t\n\r\f]
\S非空白
*0 次或多次\d*
+1 次或多次\d+
?0 次或 1 次\d?
{n}恰好 n 次\d{3}
{n,}至少 n 次\d{2,}
{n,m}n 到 m 次\d{3,5}
(...)捕獲組(\d{4})-(\d{2})
(?:...)非捕獲組(?:\d{3})?\d{4}
a|b或cat|dog
\b單字邊界\bcat\b
\B非單字邊界

進階實戰範例

1. 提取所有數字(含負號、小數點)

String regex = "-?\\d+(\\.\\d+)?"; // -123, 45.67, 0.5
Matcher m = Pattern.compile(regex).matcher("Temp: -5.5, 100, 3.14");
while (m.find()) System.out.println(m.group());

2. 手機號驗證(中國大陸)

String regex = "^1[3-9]\\d{9}$";

3. 分組替換:隱藏身分證中間 8 位

String id = "110101199003071234";
String masked = id.replaceAll("(\\d{6})\\d{8}(\\d{4})", "$1********$2");
// 結果: 110101********1234

效能建議

  • 預編譯 Pattern:靜態常量或單例複用,避免重複編譯。
  • 避免過度回溯:慎用 .*、.+,改用具體字元類或佔有優先量詞 .*?。
  • 大量資料用 Matcher.usePattern() 切換 Pattern,減少物件創建。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved