You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Java正则表达式匹配不以abc、def、ghi结尾的行?

Java正则表达式:匹配不以abc、def或ghi结尾的行

要实现匹配不以abc、def、ghi结尾的行,核心思路是用负向先行断言排除这三种结尾场景,Java里可以直接用下面的正则表达式:

^(?!.*(abc|def|ghi)$).*$

正则拆解

  • ^:锚定行的开头
  • (?!.*(abc|def|ghi)$):零宽负向先行断言,意思是「当前位置往后,不能是任意字符(.*)加上abc/def/ghi再到行尾」
  • .*:匹配任意数量的任意字符(默认不包含换行符)
  • $:锚定行的结尾

Java代码示例

把正则用在代码里验证你的测试用例:

import java.util.regex.*;

public class EndingExclusionRegex {
    public static void main(String[] args) {
        // 编译正则,若要处理多行文本,加上Pattern.MULTILINE标志
        Pattern pattern = Pattern.compile("^(?!.*(abc|def|ghi)$).*$");
        
        String[] testLines = {
            "1234abc", "09mno", "ef", "def", "hello", "helloghi", "longertext"
        };
        
        for (String line : testLines) {
            boolean isValid = pattern.matcher(line).matches();
            String status = isValid ? "有效" : "无效";
            // 对应示例里的注释逻辑
            if (!isValid) {
                if (line.endsWith("abc")) status += "(以'abc'结尾)";
                else if (line.endsWith("def")) status += "(以'def'结尾)";
                else if (line.endsWith("ghi")) status += "(以'ghi'结尾)";
            }
            System.out.printf("%-12s -- %s%n", line, status);
        }
    }
}

运行结果

1234abc     -- 无效(以'abc'结尾)
09mno       -- 有效
ef          -- 有效
def         -- 无效(以'def'结尾)
hello       -- 有效
helloghi    -- 无效(以'ghi'结尾)
longertext  -- 有效

注意事项

如果是处理包含多行的字符串(比如读取整个文本文件),编译正则时要加上Pattern.MULTILINE标志,这样^和$才会匹配每行的首尾,而不是整个字符串的开头和结尾:

Pattern pattern = Pattern.compile("^(?!.*(abc|def|ghi)$).*$", Pattern.MULTILINE);

内容的提问来源于stack exchange,提问作者The Impaler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:25:09