假设我有以下测试字符串:
decimal?
我想使用正则表达式捕获I want to match:
123
456
和123
。
我正在尝试这个:
456
但它只捕获最后一组。有什么想法吗?
答案 0 :(得分:0)
I want to match:\K|\G(?!^)(?:\n\s\s(\d+))
您可以使用\G
,因为正则表达式引擎只会记住最后一组。请参阅演示。
答案 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