从正则表达式获取字符串中的数字对

时间:2014-06-03 04:17:37

标签: regex

我发现类似的问题Regular expression to match sets of numbers that are not equal nor reversed,但我在regexp中表现不佳,所以需要一个建议。 我有字符串,即:3344654865,我需要知道第一个字符是两个不相等的对。 我试过这个正则表达式

^(?:(\d)(?:\1)(\d)(?:\2))

但它只捕获对中的第一个数字

1.  [0-1]   `3`
2.  [2-3]   `4`

在示例3344654865中,它应捕获两对数字,其中对内的数字等于3 = 3,并且4 = 4。 如何升级我的正则表达式,它将从字符串的开头返回两个不相等的对?

3 个答案:

答案 0 :(得分:2)

这对我有用^((\d)\2)(?!\1)(\d)\3.*
匹配第一个字符是两个不相等的对 Demo

更新:每个请求^((\d)\2)(?!\1)((\d)\4)所需匹配为否。 1& 3
Demo

如果匹配必须是1& 2然后使用以前的模式之一来验证它是否符合您的条件,然后应用此模式^(\d\d)(\d\d)

答案 1 :(得分:1)

^((\d)\2)(?!\1)((\d)\4)

结果:

3344654865 -> (33, 3, 44, 4)
12345      -> fail (digits not same in pairs)
9          -> fail (too short)
3333       -> fail (two pairs same)

由于需要进行反向引用,很难消除一个角色的干预组。

答案 2 :(得分:1)

此:

^(\d+?)(?!\1)(\d+)

会给你:

 33 - 44654865

制作相同长度的第二部分并非易事,但第二部分的第一部分保证与第一部分不同。所以你必须亲自去拿它们。

通过不重要,我的意思是你需要尝试1位,2位,3位数字,等等,交替或循环。