多个匹配的公共前缀

时间:2015-06-02 09:31:51

标签: ruby regex

假设我有以下测试字符串:

decimal?

我想使用正则表达式捕获I want to match: 123 456 123

我正在尝试这个:

456

但它只捕获最后一组。有什么想法吗?

5 个答案:

答案 0 :(得分:0)

I want to match:\K|\G(?!^)(?:\n\s\s(\d+))

您可以使用\G,因为正则表达式引擎只会记住最后一组。请参阅演示。

https://regex101.com/r/pG1kU1/13

答案 1 :(得分:0)

您可以使用android.R.layout.simple_dropdown_item_1line,

String#scan

答案 2 :(得分:0)

匹配字符串中的I want to match:部分后,您的下一个匹配点将在此之后的某个位置。这意味着在给定测试字符串的格式的情况下,您只能与该正则表达式匹配一次。

答案 3 :(得分:0)

不幸的是,您无法获取捕获组的所有捕获值。 一个很好的解释是here,它说:

  

给定组的返回值是最后一个被捕获的
  由于具有量词的捕获组保持其数量,因此当您检查组时引擎返回什么值?所有引擎都返回捕获的最后一个值。例如,如果您将字符串A_B_C_D_与([A-Z] )+匹配,则在检查匹配时,组1将为D 。除.NET引擎外,所有中间值都将丢失。从本质上讲,每次匹配模式时,组1都会被覆盖。

所以,如果您知道要捕获的行最多为2,那么您可以尝试这样的:

I want to match:(?:\n\s\s(\d*))?(?:\n\s\s(\d*))?

即。手动重复每一行的捕获组。

答案 4 :(得分:-1)

您可以捕获示例字符串,如下所示:HttpServletRequest