Regex 使用引用捕获重复的组

Regex 使用引用捕获重复的组,regex,Regex,我试图用这个表达式查找数字(少于第一个),但它只适用于最后一个数字。。。我知道需要捕获重复的组,而不是重复捕获的组,但我不明白这是怎么回事 注册: 范例 1212asdfasdfdasf101.102.103.asdsadasdasd 1213asdfasdfdasf104.105.106.asdsadasdasd 我要拍102和103,105,106,还有1212和1213。怎样??谢谢 答案取决于你使用的语言 对于大多数regex的口味,没有“简单”的答案。。。例如,您可能认为您可以这样

我试图用这个表达式查找数字(少于第一个),但它只适用于最后一个数字。。。我知道需要捕获重复的组,而不是重复捕获的组,但我不明白这是怎么回事

注册:

范例

1212asdfasdfdasf101.102.103.asdsadasdasd

1213asdfasdfdasf104.105.106.asdsadasdasd

我要拍102和103,105,106,还有1212和1213。怎样??谢谢

答案取决于你使用的语言

对于大多数regex的口味,没有“简单”的答案。。。例如,您可能认为您可以这样做:

^(?:.*?(\d+))+
…这将(您希望)为每组数字创建一个新的捕获组

但是,如果您快速查看(例如),您将看到它显示:

捕获组通过从左到右计算其左括号进行编号

i、 e.有一个固定的数字,由您键入的括号对数指定!因此,在大多数语言中,为了完成这项工作,您需要做的不仅仅是简单的正则表达式匹配

也就是说,除非你可以通过做一些可怕的事情,比如:

^(?:.*?(\d+))?(?:.*?(\d+))?(?:.*?(\d+))?(?:.*?(\d+))?

但是,您可以使用或Perl 6正确执行此正则表达式匹配。

您使用的是哪种语言/环境/工具/正则表达式风格?您仍在重复捕获组(外部
*
重复
(\d*)
)。除非您使用的是.NET,否则您需要一个变通方法使用visual basic 2008,我发现最好的选择是将.102.103作为一个捕获组,然后再使用另一个捕获组,但只使用脚本“.102.103”。但是使用正则表达式要两次,可能有一个表单只有一个正则表达式所以我们说的是.NET?在本例中,请查看为第二个捕获组返回的
对象。它将有一个属性
捕获
,您可以在其中获取所有号码,确定吗?第二个捕获组仅获取103,而不是102和103:S@user2542437:您希望示例文本的输出是什么?您希望组中的每个数字+的实例,但希望整个字符串在一个匹配中?有关如何使用此结果的更多信息可能有助于找到解决方案。
^(?:.*?(\d+))?(?:.*?(\d+))?(?:.*?(\d+))?(?:.*?(\d+))?