【发布时间】:2016-03-20 19:35:09
【问题描述】:
对不起,标题很糟糕,但这很难概括。
所以,假设我有以下数据:
123
1 2 3
12 3
1 2 3
1 23
1、2 和 3 可以替换为任意数字 (\d)
我需要匹配所有仅使用 RegEx 的人,我想知道这是否可能(顺便说一下,这是一种假设情况,因此无需担心语言或我为什么需要这个)。
为了匹配第一种情况,123,我可以使用这个正则表达式:\d{3}。现在,如果我想包含匹配的空格,并且整个内容长度为 3 位数字/字母,我可以使用 [\d\s]{3}。但是,这将匹配第一种情况,但为了匹配第二种情况,我必须将其更改为 [\d\s]{5}。
我想要的是能够选择重复的次数(在本例中为{3}),但是数字之间可以有任意数量的空格。
我可以使用\d\s*\d\s*\d\s*,但这非常低效。使用[\d\s*]{3}也不起作用,原因同上。
也许可以使用捕获组,希望你能看到我想要得到的:
[(\d)\s*]$1{3}
【问题讨论】:
-
您应该注意,
*在字符类中丢失了它的元字符函数,并且只匹配字面意思,因此[\d\s*]匹配 1 个空格或 1 个数字或 1 个* -
@SebastianProske 是的,我知道,它只是展示了我想要实现的目标。我现在编辑并输入
(),谢谢! -
您的编辑让事情变得更糟——括号在字符类中没有元字符功能。只有
-用作范围,^用作否定(如果放在开头) -
@SebastianProske 谢谢,我没有意识到这一点。我会撤消它。
-
这是对第一个捕获组的反向引用,再次匹配它的内容。
标签: regex