java - 具有不同数字、可选字母和点的数字的混合正则表达式
问题描述
我正在为手持扫描设备开发一个 Android 应用程序,该应用程序应该扫描不同类型的 QR 码;这些二维码可以包含不同的数字、字母、圆点和加号;由于我不是正则表达式的专家,因此非常感谢任何提示或帮助。
正则表达式应匹配以下数字、字母、点和加号的出现:
1256+70
1235.B+70
1256+70+DB
1235.B+70+DB
1256+70+DB2020-123
1235.B+70+DB2020-123
1256+0+DB2020-123
1235.B+0+DB2020-123
前四位数字范围可以是[100-99999].[AZ]
我想出了以下正则表达式
[0-9]{4}
[0-9]{3,6}$.?[A-Z]?+[0-9]+DB[0-9]{4}-[0-9]]
[0-9]{3,6}$.?[A-Z]?+[0-9]
[0-9][0-9][0-9][0-9].[0-9][0-9].+DB
\b\d{3,6}\b
[0-9]{3,6}$.?[A-Z]?+[0-9]+DB[0-9]{4}-[0-9]]
[0-9]{3,6}$.?[A-Z]?+[0-9]
[0-9]{3,6}$.?[A-Z]?+[0-9]
但它们并没有涵盖所有可能的组合并且错过了很多选项 - 因此非常感谢任何帮助或提示 - 在此先感谢!
解决方案
查看示例数据,一种选择可能是使用 1 个带有特定和可选部分的正则表达式:
^[1-9]\d{2,4}(?:\.[A-Z])?\+\d+(?:\+DB(?:\d{4}-\d{3})?)?$
^
字符串的开始[1-9]\d{2,4}
匹配从 100 到 99999(?:\.[A-Z])?
可选匹配.
和字符 AZ\+\d+
匹配+
和 1+ 位(或用于\d{1,2}
匹配 1 位或 2 位数字)(?:
非cpature组\+DB(?:\d{4}-\d{3})?
匹配+
和 DB 并可选择匹配 4 位-
和 3 位
)?
关闭非捕获组并使其可选$
字符串结束
在 Java 中
String regex = "^[1-9]\\d{2,4}(?:\\.[A-Z])?\\+\\d+(?:\\+DB(?:\\d{4}-\\d{3})?)?$";
推荐阅读
- c - 使用小批量时如何更新权重?
- php - Do ints differ from strings when type hinting in PHP
- openshift - Openshift oc cluster up 无法连接到 127.0.0.1:8443
- spring - @SpringBootTest 在什么情况下需要可选的“类”元素?
- android - Flutter - ListView 中的交互式 ListTile
- angular - 动态创建组件并导航到它
- c++ - Sfml网络,SocketSelector成员函数isReady不能正常工作
- laravel - Laravel Excel 导出 - 从视图不起作用
- javascript - 与绑定进度功能一起使用时,Angular Bootstrap Progressbar 未更新
- linux - crontab 中的 OpenVPN 问题