正则表达式:设置时可选的字符(点),它必须位于字符串集中的任何位置

标签 regex conditional-statements option-type

.以下正则表达式中的(点)是可选的(?)。

目前每个点都可以设置或不设置。怎么可能做到只要设置了一个点,就必须设置每个点。

/^([\d]{3}).?([\d]{4}).?([\d]{4}).?([\d]{2})$/

最佳答案

您可以在第一个捕获组之后使用带有可选点的捕获组来捕获第一个点(或其缺失),然后使用对该组的 \2 反向引用而不是可选点(请注意,必须对它们进行转义以匹配文字点):

^(\d{3})(\.?)(\d{4})\2(\d{4})\2(\d{2})$

请参阅regex demo .

请注意,原始正则表达式中的捕获组将从第二个正则表达式开始移动一点((\.?) 之后的 (\d{4}) 将具有ID 为 3,依此类推)。

详细信息

  • ^ - 字符串开头
  • (\d{3}) - 第 1 组:三位数字
  • (\.?) - 第 2 组:一个或零个点
  • (\d{4}) - 第 3 组:四位数字
  • \2 - 对第 2 组值的反向引用(. 或空字符串
  • (\d{4}) - 第 4 组:四位数字
  • \2 - 对第 2 组值的反向引用
  • (\d{2}) - 第 5 组:两位数字
  • $ - 字符串结尾。

关于正则表达式:设置时可选的字符(点),它必须位于字符串集中的任何位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48271726/

相关文章:

c# - Regex.Split() 奇怪的行为

jquery - 检查选择器是否有一组特定的类

java - while 循环条件似乎没有被检查

java - fasterxml JsonInclude 可选

regex - 在 R 中将字符转换为 lowerCamelCase

regex - 为什么正则表达式在 Karate 框架中不起作用?

Java:用方法结果替换 RegEx

JavaScript "if"操作顺序

java - 编写 Java 8 可选对象

java - 在调用方法之前检查两个可选内容