首页 > 解决方案 > 正则表达式匹配不以 001 或 002 开头的字符串

问题描述

尝试编写 Javax 验证正则表达式模式以匹配具有以下内容的任何字符串:

到目前为止,我所拥有的适用于我上面列出的第二个和第三个要求:

“^[\w\-+\$_]{35,50}$”

现在我正在尝试添加上面列出的第一个要求,但是我似乎无法让它工作:

”^[?!(001|002|003)\-+\$_]{35,50}$”</p>

标签: javaregex

解决方案


我将String#matches在这里使用以下正则表达式模式:

^(?!00[123])\d{3}-[A-Za-z0-9$+_-]{35,50}$

这在模式的开头使用否定前瞻来断言输入不是以001002或开头003

示例 Java 代码:

String input = "123-12323456780abcdefghij1234567890abcde";
if (input.matches("(?!00[123])\\d{3}-[A-Za-z0-9$+_-]{35,50}")) {
    System.out.println("MATCH");
}

请注意,使用时String#matches我们不需要^$开始/结束锚点。这是因为matches()隐式地将输入正则表达式模式应用于整个字符串。


推荐阅读