Regex 使用[]-仅第一部分X匹配次数(使用{})

Regex 使用[]-仅第一部分X匹配次数(使用{}),regex,Regex,很抱歉标题不好,但这很难概括 那么,假设我有以下数据: 123 1 2 3 12 3 1 2 3 1 23 1、2和3可替换为任何数字(\d) 我需要匹配所有只使用正则表达式的人,我想知道这是否可能(顺便说一句,这是一个假设的情况,所以不必担心语言或者我为什么需要它) 为了匹配第一种情况,123,我可以使用以下正则表达式:\d{3}。现在,如果我想包含匹配的空格,并且整个内容是3位/字母长的,我可以使用[\d\s]{3}。但是,这将匹配第一种情况,但为了匹配第二种情况,我必须将其更改为[

很抱歉标题不好,但这很难概括

那么,假设我有以下数据:

123
1 2 3
12 3
1  2  3
1  23
1
2
3
可替换为任何数字(
\d

我需要匹配所有只使用正则表达式的人,我想知道这是否可能(顺便说一句,这是一个假设的情况,所以不必担心语言或者我为什么需要它)

为了匹配第一种情况,
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*){3}

说明:

  • (?:\d\s*)
    将匹配任何
    数字
    ,后跟
    或更多空格,使用
    {3}
    将重复3次

p.S:您已接近解决方案。您应该使用捕获组
()
,而不是字符类
[]


字符类所做的是从所提到的字符中选择一个。

您应该注意,
*
在字符类中丢失了它的元字符函数,只是字面上匹配,所以
[\d\s*]
匹配1个空格或1个数字或1
*
@SebastianProske是的,我知道,它只是展示了我想要达到的目标。我现在编辑并放置
()
,谢谢!你的编辑让事情变得更糟——括号在chracter类中没有元字符函数。只有
-
用作范围,而
^
用作否定(如果放在开头)@SebastianProske谢谢,我没有意识到这一点。我将撤消它。这是对第一个捕获的组的反向引用,再次匹配它的内容。您可以跳过捕获部分,只需使用
(?:\d\s*){3}
@Alec:可以,但我们这里的反向引用不会用完。无论如何,谢谢你的建议。虽然你很可能不会注意到正常情况下的差异,但不捕捉可能会稍微快一点use@Alec:如果你这么说的话。完成!谢谢,我早该想到的!