【发布时间】:2016-03-15 19:24:29
【问题描述】:
我需要一个匹配以下行的正则表达式:
123
12345
1234567
所以我知道字符串的最大长度 (7),并且该字符串的开头只能包含数字和空格。
我试过这个:[ 0-9]{7},但是这个会匹配像12 34这样的字符串
【问题讨论】:
-
您使用的是什么正则表达式风格/工具?
标签: regex
我需要一个匹配以下行的正则表达式:
123
12345
1234567
所以我知道字符串的最大长度 (7),并且该字符串的开头只能包含数字和空格。
我试过这个:[ 0-9]{7},但是这个会匹配像12 34这样的字符串
【问题讨论】:
标签: regex
[ 0-9]{7} 将匹配任意顺序的 7 个数字或空格,并且此模式可以返回部分匹配,因为它没有锚定在字符串的开头/结尾。
您可以使用前瞻限制字符串的长度,并使用 sequential 子模式:
^(?=[\s\d]{7}$)\s*\d*$
模式分解:
^ - 字符串开头(?=[\s\d]{7}$) - 只有当整个字符串由空格或/和全长 7 的数字组成时,该字符串才会匹配\s* - 0+ 个空格符号\d* - 0+ 位$ - 字符串结束。【讨论】:
^[\d]{4}-(?=[\s\d]{7})\s*\d*-[\d]{1}$ 请参阅:regex101.com/r/eB0fR3/1
^\d{4}-(?=[\s\d]{7})\s*\d*-\d$。 (?=[\s\d]{7}) 前瞻要求 \s*\d* 模式至少匹配 7 个字符。请参阅demo。我想你需要^\d{4}-(?=[\s\d]{7}-)\s*\d*-\d$。
^(?=[\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/
【讨论】: