正则表达式用于重复数字序列

时间:2013-02-28 14:52:09

标签: regex numbers expression repeat

我正在使用一个reg表达式,允许4到8个数字之间的序列,但前两个和后两个不能相同。

例如

1245612 - 包含一场比赛
346731 - 没有匹配
789287 - 没有匹配
789278 - 包含比赛

4 个答案:

答案 0 :(得分:1)

如果您希望前两位和后两位数相同(您的示例提示),则正则^(\d\d)\d{0,4}\1$是合适的。

有关示例的正则表达式,请参阅http://regexr.com?33uuu

答案 1 :(得分:1)

您有两种可能性:

  1. 两对相同时匹配

    ^(\d{2})\d{0,4}\1$
    

    here on Regexr

  2. 两对不同时匹配

    ^(\d{2})\d{0,4}(?!\1)\d{2}$
    

    here on Regexr

  3. 字符串开头的锚^和字符串结尾的$很重要,否则你会得到部分匹配。

答案 2 :(得分:0)

如果你真的想要你所描述的(前两位和后两位数字匹配),那么你可以这样做:

(?!(\d\d)\d{0,4}\1)\d{4,8}

表达式的第一部分断言它匹配形式[两位数] [0到4个其他数字] [再次相同的两位数]的表达式,然后放在一边从那里它将匹配从长度4到8的任何数字序列。

试用这个正则表达式(使用Javascript样式的正则表达式):

http://regexpal.com/?flags=g&regex=(%3F!(%5Cd%5Cd)%5Cd%7B0%2C4%7D%5C1)%5Cd%7B4%2C8%7D&input=3366

答案 3 :(得分:0)

对于此任务,reg表达式不需要或我不理解此任务。 你只需要将i [0]和i [1]与i [n]和i [n-1]进行比较。