如何编写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
相关产品推荐
相关产品推荐

