杰瑞科技汇

Java正则表达式测试工具怎么用?

在线 Java 正则表达式测试工具

这个工具允许您输入正则表达式、测试文本,并实时查看匹配结果、分组信息和详细解释。

Java正则表达式测试工具怎么用?-图1
(图片来源网络,侵删)

<iframe src="https://regex101.com/" width="100%" height="600px" frameborder="0" allowfullscreen>

为什么推荐这个工具?

  • 实时预览:输入正则表达式和文本后,结果会立刻显示,无需编译或运行代码。
  • 详细解释:它会高亮显示匹配的文本,并用不同颜色标出捕获组 ,还能解释正则表达式的语法。
  • 多语言支持:可以选择 Java、Python、JavaScript 等不同引擎,语法略有差异。
  • 调试友好:可以清晰地看到哪些部分被匹配,哪些没有被匹配,非常有助于调试复杂的正则表达式。

如何使用 Java 代码进行正则表达式测试

如果您想在 Java 代码中测试正则表达式,主要有以下几个核心类:

  1. java.util.regex.Pattern:编译后的正则表达式对象。
  2. java.util.regex.Matcher:对输入字符串进行匹配操作的对象。
  3. String.matches():一个便捷方法,用于检查整个字符串是否匹配正则表达式。

下面是一个完整的 Java 示例,演示了如何测试、查找、替换和分割字符串。

示例代码:RegexTester.java

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTester {
    public static void main(String[] args) {
        // 1. 准备工作:定义正则表达式和测试文本
        // 示例:匹配一个或多个数字,后面跟着一个或多个字母
        String regex = "\\d+[a-zA-Z]+";
        String text = "订单号123abc,金额456XYZ,备注:无";
        System.out.println("--- 1. 基本匹配测试 ---");
        // 2. 编译正则表达式,创建 Pattern 对象
        // 注意:为了避免每次调用都重新编译,Pattern 对象通常会被缓存或定义为静态常量
        Pattern pattern = Pattern.compile(regex);
        // 3. 创建 Matcher 对象,用于在文本中查找匹配项
        Matcher matcher = pattern.matcher(text);
        // 4. 查找并打印所有匹配项
        System.out.println("原始文本: " + text);
        System.out.println("正则表达式: " + regex);
        System.out.println("所有匹配项:");
        // matcher.find() 尝试找到下一个匹配的子序列
        while (matcher.find()) {
            // matcher.group() 返回最近一次匹配的子串
            System.out.println("  - 找到匹配: " + matcher.group());
        }
        System.out.println("\n--- 2. 使用 String.matches() (整体匹配) ---");
        // String.matches() 检查整个字符串是否完全匹配正则表达式
        String text1 = "123abc"; // 完全匹配
        String text2 = "123abc XYZ"; // 不完全匹配,因为后面还有空格和字符
        System.out.println("字符串 '" + text1 + "' 是否匹配 '" + regex + "'? " + text1.matches(regex)); // true
        System.out.println("字符串 '" + text2 + "' 是否匹配 '" + regex + "'? " + text2.matches(regex)); // false
        System.out.println("\n--- 3. 分组测试 ---");
        // 示例:匹配 "数字+字母" 的格式,并分别捕获数字和字母部分
        String groupRegex = "(\\d+)([a-zA-Z]+)";
        String groupText = "订单号123abc,金额456XYZ";
        Pattern groupPattern = Pattern.compile(groupRegex);
        Matcher groupMatcher = groupPattern.matcher(groupText);
        System.out.println("原始文本: " + groupText);
        System.out.println("正则表达式: " + groupRegex);
        System.out.println("分组匹配结果:");
        while (groupMatcher.find()) {
            // group(0) 表示整个匹配的子串
            // group(1) 表示第一个捕获组 (\\d+)
            // group(2) 表示第二个捕获组 ([a-zA-Z]+)
            System.out.println("  完整匹配: " + groupMatcher.group(0));
            System.out.println("    数字部分: " + groupMatcher.group(1));
            System.out.println("    字母部分: " + groupMatcher.group(2));
        }
        System.out.println("\n--- 4. 替换操作 ---");
        // 使用 matcher.replaceAll() 替换所有匹配项
        String replaceText = "我的邮箱是test@example.com,备用邮箱是user@domain.org。";
        String emailRegex = "\\w+@\\w+\\.\\w+"; // 一个简单的邮箱正则
        Pattern replacePattern = Pattern.compile(emailRegex);
        Matcher replaceMatcher = replacePattern.matcher(replaceText);
        String replacedText = replaceMatcher.replaceAll("[已隐藏邮箱]");
        System.out.println("原始文本: " + replaceText);
        System.out.println("替换后文本: " + replacedText);
        System.out.println("\n--- 5. 分割操作 ---");
        // 使用 String.split() 根据正则表达式分割字符串
        String splitText = "apple,banana;orange|grape";
        String splitRegex = "[,;|]"; // 用逗号、分号或竖线分割
        String[] fruits = splitText.split(splitRegex);
        System.out.println("原始文本: " + splitText);
        System.out.println("分割后的数组: " + java.util.Arrays.toString(fruits));
    }
}

代码输出结果

--- 1. 基本匹配测试 ---
原始文本: 订单号123abc,金额456XYZ,备注:无
正则表达式: \d+[a-zA-Z]+
所有匹配项:
  - 找到匹配: 123abc
  - 找到匹配: 456XYZ
--- 2. 使用 String.matches() (整体匹配) ---
字符串 '123abc' 是否匹配 '\d+[a-zA-Z]+'? true
字符串 '123abc XYZ' 是否匹配 '\d+[a-zA-Z]+'? false
--- 3. 分组测试 ---
原始文本: 订单号123abc,金额456XYZ
正则表达式: (\d+)([a-zA-Z]+)
分组匹配结果:
  完整匹配: 123abc
    数字部分: 123
    字母部分: abc
  完整匹配: 456XYZ
    数字部分: 456
    字母部分: XYZ
--- 4. 替换操作 ---
原始文本: 我的邮箱是test@example.com,备用邮箱是user@domain.org。
替换后文本: 我的邮箱是[已隐藏邮箱],备用邮箱是[已隐藏邮箱]。
--- 5. 分割操作 ---
原始文本: apple,banana;orange|grape
分割后的数组: [apple, banana, orange, grape]

常用正则表达式速查表

用途 正则表达式 说明
数字 ^\\d+$ 匹配一个或多个整数
^[+-]?\\d+(\\.\\d+)?$ 匹配可选正负号的整数或浮点数
邮箱 ^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$ 一个较为通用的邮箱格式验证
手机号 ^1[3-9]\\d{9}$ 匹配中国大陆11位手机号号段
URL ^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$ 匹配常见的 HTTP/HTTPS URL
日期 ^\\d{4}-\\d{2}-\\d{2}$ 匹配 YYYY-MM-DD 格式的日期
中文 ^[\u4e00-\u9fa5]+$ 匹配一个或多个中文字符
匹配行首/行尾 ^abc 匹配行首的 "abc"
xyz$ 匹配行尾的 "xyz"
特殊字符 \\. 匹配点号 (需要转义)
\\[ 匹配左方括号 [ (需要转义)
\\$ 匹配美元符号 (需要转义)

希望这个工具和详细的说明能帮助您更好地使用 Java 正则表达式!

分享:
扫描分享到社交APP
上一篇
下一篇