我正在尝试编写一个 RegExp 以仅匹配 8 位数字,其中一个可选的逗号可能隐藏在数字之间。
所有这些都应该匹配:
12345678
12,45678
123456,8
Run Code Online (Sandbox Code Playgroud)
现在我有:
^[0-9,]{8}
Run Code Online (Sandbox Code Playgroud)
但当然这错误地匹配 012,,,67
示例:https : //regex101.com/r/dX9aS9/1
我知道存在选项,但不明白如何保持适用于逗号的 8 位长度,同时将逗号限制为 1。
任何提示将不胜感激,谢谢!
要匹配只能包含数字和中间可选逗号的 8 个字符字符串,您可以使用
^(?=.{8}$)\d+,?\d+$
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
前瞻将要求字符串包含 8 个字符。,?将使匹配逗号成为可选,并且+后面\d将要求可选逗号前后至少有 1 位数字。
如果您需要匹配具有 8 位数字和可选逗号的字符串,您可以使用
^(?:(?=.{9}$)\d+,\d+|\d{8})$
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
实际上,该字符串将包含 9 个字符(如果有逗号),或者只有 8 个字符 - 如果只有数字。
解释:
^- 字符串的开头(?:(?=.{9}$)\d+,\d+|\d{8})- 2 个替代方案:
(?=.{9}$)\d+,\d+- 1 个以上数字后跟 1 个逗号后跟 1 个以上数字,并且匹配的整个字符串应为 9 个字符长(8 个数字和 1 个逗号)|- 或者\d{8}- 8 位数字$- 字符串结尾请参阅Java 代码演示(请注意String#matches(),使用 时,模式开头和结尾处的^和$锚点是多余的,可以省略,因为与此方法一起使用时模式默认是锚定的):
List<String> strs = Arrays.asList("0123,,678", "0123456", // bad
"01234,567", "01234567" // good
);
for (String str : strs)
System.out.println(str.matches("(?:(?=.{9}$)\\d+,\\d+|\\d{8})"));
Run Code Online (Sandbox Code Playgroud)
前导/尾随逗号注释:
您只需在第一个替代分支中将+(匹配 1 次或多次出现)量词替换为*(匹配 0 次或多次出现)即可允许前导/尾随逗号:
^(?:(?=.{9}$)\d*,\d*|\d{8})$
Run Code Online (Sandbox Code Playgroud)
请参阅此正则表达式演示
| 归档时间: |
|
| 查看次数: |
4667 次 |
| 最近记录: |