正则表达式以 79 开头,长度为 9

Regex starts with 79 and have length of 9

大家好, 我是正则表达式的新手,正在尝试在 java 中应用两个特定的正则表达式。

1 - 正则表达式以 79 开头,仅包含数字且长度必须为 9。我的解决方案是

 ^(79)\d{9}$

但不匹配此字符串。 791234567。

2 - 另一个正则表达式以 79 或 78 开头,仅包含数字且长度必须为 10。 我的解决方案是 ^(79-78)\d{10}$

两者不同,每种情况都需要不同的正则表达式。任何帮助都会很棒。

\d{9}

表示(另一个)9位数字。 您需要 7 个(您已经使用过 9 - 2 个)

第二题同理, 用这个代替

\d{8}

表示8个附加号码

使用前瞻断言

^(?=79)\d{9}$
^(?=79|78)\d{10}$

否则匹配前两个字符,然后匹配剩余的 7 或 8 个字符

^79\d{7}$
^7[89]\d{8}$

regex101

这是正则表达式:
^79\d{7}$^7(8|9)\d{8}$

现在进行说明:

  • "79" 有两个字符,因此 79\d{9} 将匹配 11 个字符
  • (79-78) 不是你想象的那样,它实际上只是按照这个特定的顺序捕获字符“79-78”,你想要的是交替:(79|78)
  • 78和79有共同的“7”,所以(79|78)可以变成7(9|8)
  • “79”还有2个字符,所以后面只需要匹配8个数字

您的正则表达式不起作用,因为您没有考虑 79 占用的 2 个字符。

应该是

^79\d{7}$

这意味着 "starting with 79, with 7 more digits following it"。总共正好有 9 个字符。

你的第二个正则表达式不起作用,因为 - 并不意味着 "or"。 | 表示 "or".

^(79|78)\d{8}$

同样,出于同样的原因,它应该是 \d{8} 而不是 \d{10}