使用正则表达式匹配一组具有可变定位的数字?

时间:2015-07-08 20:40:12

标签: regex pcre

我正在尝试使用RegEx来匹配用户输入的一组数字。我希望用户提供4位数的位置和值。我们的想法是获取此信息,搜索列表并返回10位数的“匹配数字字符串”,当且仅当用户提供的数字位于正确位置时。任何人都可以提供我可以使用的正则表达式吗?我在我的智慧结束,并试图不被解雇。

使用示例进行快速更新:用户输入## 2#5#8 ## 9

应匹配

1528578009 8324598769

不匹配

4726754839 5023859800

希望这有助于了解我想要做什么。感谢您的回复

2 个答案:

答案 0 :(得分:1)

据我所知,你的意见是:

p1 v1

p2 v2

p3 v3

p4 v4

其中p是位置,v是数字的值。 现在如果是这种情况,按照增加的位置顺序排列它们,所以我假设p1< p2< p3< P4。

现在计算以下值:

a1 = p1 - 1

a2 = p2 - p1 - 1

a3 = p3 - p2 - 1

a4 = p4 - p3 - 1

a5 = 10 - p4

现在使用以下正则表达式

[1-9]{a1}v1[0-9]{a2}v2[0-9]{a3}v3[0-9]{a4}v4[0-9]{a5}

该方法基于位置为1的事实。这是最重要的数字位置被认为是1而不是0。

答案 1 :(得分:0)

假设您的数据类似于

0123456789
0103050709
0020406080
0123000000

你可以使用像^0123......$这样的正则表达式来匹配任何字符串" 0123"作为前四位数,匹配第一行和最后一行。同样地,^.1.3.5.7..$将匹配位置2,4,6和8中与1,3,5和7匹配的任何字符串,与前两行匹配。

如果用户输入了指示数字和位置的整数对 d p ,则可以轻松生成这样的正则表达式字符串。一种简单的方法是从字符串"^..........$"开始,并用索引 p 替换每个字符 d (如果索引是从一开始的话。如果索引从零开始,则一个到 p 。确保 d 只是一个数字,并且 p 在适当的范围内。

如果您希望对正则表达式更严格,请使用\d代替.来匹配数字而不是任何字符。