java - 正则表达式匹配不以 001 或 002 开头的字符串
问题描述
尝试编写 Javax 验证正则表达式模式以匹配具有以下内容的任何字符串:
- 不以 001、002 或 003 开头
- 以 3 位数字开头,后跟一个连字符,然后是任何字母、数字、连字符、$、+ 或 _
- 总共包含 35-50 个字符
到目前为止,我所拥有的适用于我上面列出的第二个和第三个要求:
“^[\w\-+\$_]{35,50}$”
现在我正在尝试添加上面列出的第一个要求,但是我似乎无法让它工作:
”^[?!(001|002|003)\-+\$_]{35,50}$”</p>
解决方案
我将String#matches
在这里使用以下正则表达式模式:
^(?!00[123])\d{3}-[A-Za-z0-9$+_-]{35,50}$
这在模式的开头使用否定前瞻来断言输入不是以001
、002
或开头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()
隐式地将输入正则表达式模式应用于整个字符串。
推荐阅读
- scala - Scala中类型构造函数和参数化类型边界之间的区别
- ios - SwiftUI:onAppear 的奇怪行为
- javascript - 使用 jquery 更改类属性
- c++ - 找到字符串的最大子序列?
- php - PHP从发布可修改的日期获取昨天的日期
- firebase - 参数为 null 而不是 ModalRoute.of() 的 id
- mysql - 使用 count 和 group_contat 后如何找到总数
- amazon-web-services - 将日期或 cron 计划从云监视事件传递到步骤函数输入
- html - Bootstrap Carousel 缩小移动设备上的图像
- flutter - 列出 vs 代码中的参数