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

正則表達式匹配含空格變體:如何匹配 "hell o" 並輸出原文?

     編輯:程式設計綜合問答

需求:匹配目標文本中的 "hello" 變體,包含任意位置插入空格(如 "hel lo", "he llo", "hell o"),並輸出**原始含空格文本**,而非去除空格後的 "hello"。

核心正則

h\s*e\s*l\s*l\s*o

或更簡潔(允許字符間任意空白):

h\s*e\s*l\s*l\s*o

若需匹配 "hello" 任意字符間可有空格:

h\s*e\s*l\s*l\s*o

Java 代碼實現

String regex = "h\\s*e\\s*l\\s*l\\s*o"; // 雙重轉義
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(text);
while (m.find()) {
    System.out.println("匹配到: [" + m.group() + "]"); // 輸出原文含空格
}

進階:任意字符間可插空格的通用函數

public static String toSpacedRegex(String keyword) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < keyword.length(); i++) {
        char c = keyword.charAt(i);
        if (i > 0) sb.append("\\s*");
        sb.append(Pattern.quote(String.valueOf(c))); // 轉義特殊字符
    }
    return sb.toString();
}

// 使用
String regex = toSpacedRegex("hello"); // h\s*e\s*l\s*l\s*o

為何原方案 `replaceAll("\\s","")` 不可行?

`replaceAll` 修改的是**副本**,且輸出時已失去原始空格位置信息。正則引擎直接在原文匹配,`m.group()` 保留原貌,滿足「輸出含空格原文」需求。

效能提示

  • 長文本、高頻匹配時,預編譯 `Pattern` 復用,避免循環內 `compile`。
  • 若關鍵字固定,可寫死正則;動態關鍵字用上述函數生成。

掌握 `\s*`「零或多個空白字符」插入字符間,即可靈活應對各類「變體關鍵字匹配並保留原文」場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved