正则表达式匹配以空格开头且仅在

时间:2016-03-15 10:37:07

标签: regex

我需要一个匹配以下行的正则表达式:

    123
  12345
1234567

所以我知道字符串(7)的最大长度,并且该字符串在开头只能包含数字和空格。

我试过这个:[ 0-9]{7}但是这个会匹配像12 34

这样的字符串

2 个答案:

答案 0 :(得分:3)

[ 0-9]{7}将按任意顺序匹配7位数或空格,此模式可以返回部分匹配,因为它不会锚定在字符串的开头/结尾。

您可以使用限制字符串长度的前瞻,并使用顺序子模式:

^(?=[\s\d]{7}$)\s*\d*$

请参阅regex demo

模式细分:

  • ^ - 字符串开头
  • (?=[\s\d]{7}$) - 仅当整个字符串由空格或/和全长7的数字组成时才匹配字符串
  • \s* - 0+空白符号
  • \d* - 0+位数
  • $ - 字符串结束。

答案 1 :(得分:1)

^(?= [\ s \ d] {7} $)\ s * \ d * $

看起来很好,并且会在给出的所有示例案例中匹配,同时将其FP概率降低到接近零。

虽然,我发现了一些可能FP的情况,特别是当字符串由7个空格或7个换行符或7个新标签组成时,我觉得有些不合预期。

演示:https://regex101.com/r/eH3jM6/2

所以,为了使它完美,让我们修改它:

                          ^(?=[ \d]{7}$) {0,6}\d*$

更多参考:检查

https://www.talentcookie.com/2015/07/lets-practice-regular-expression/ https://www.talentcookie.com/2016/01/some-useful-regular-expression-terminologies/