Ruby 多个匹配的公共前缀
假设我有以下测试字符串:Ruby 多个匹配的公共前缀,ruby,regex,Ruby,Regex,假设我有以下测试字符串: I want to match: 123 456 我想使用正则表达式来捕获123和456 我正在尝试这个: I want to match:(?:\n\s\s(\d*))* 但它只捕获最后一组。有什么想法吗 I want to match:\K|\G(?!^)(?:\n\s\s(\d+)) 您可以使用\G,因为正则表达式引擎只记住最后一个组。请参阅演示 您可以使用\G,因为正则表达式引擎只记住最后一个组。请参阅演示 您可以像这样捕获示例字符串:\n*\s
I want to match:
123
456
我想使用正则表达式来捕获123
和456
我正在尝试这个:
I want to match:(?:\n\s\s(\d*))*
但它只捕获最后一组。有什么想法吗
I want to match:\K|\G(?!^)(?:\n\s\s(\d+))
您可以使用\G
,因为正则表达式引擎只记住最后一个组。请参阅演示
您可以使用\G
,因为正则表达式引擎只记住最后一个组。请参阅演示
您可以像这样捕获示例字符串:
\n*\s*(\d+)
您可以像这样捕获示例字符串:\n*\s*(\d+)
您可以使用字符串扫描
s = <<-STR
123
456
STR
s.scan /\d+/ #=> ["123", "456"]
s.scan /(\d+)/ #=> [["123"], ["456"]]
s=[[“123”],[“456”]]
您可以使用String#scan
s = <<-STR
123
456
STR
s.scan /\d+/ #=> ["123", "456"]
s.scan /(\d+)/ #=> [["123"], ["456"]]
s=[[“123”],[“456”]]
一旦你匹配了字符串中的部分我想匹配:
,你的下一个匹配点就会在那之后的某个地方。这意味着,给定测试字符串的格式,您只能与该正则表达式匹配一次。一旦您匹配了字符串中我想要匹配的部分:
,您的下一个匹配点将位于该部分之后的某个位置。这意味着,给定测试字符串的格式,您只能与该正则表达式匹配一次。不幸的是,您无法获得捕获组的所有捕获值。
一个好的解释是,它说:
给定组的返回值是最后捕获的值
由于带有量词的捕获组保留其编号,因此在检查该组时,引擎将返回什么值?所有引擎返回捕获的最后一个值。例如,如果将字符串A_B_C_D_与([A-Z])+匹配,则在检查匹配时,组1将为D。除.NET引擎外,所有中间值都将丢失。本质上,组1在每次模式匹配时都会被覆盖
因此,如果您知道要捕获的行最多为2行,那么您可以尝试以下方法:
I want to match:(?:\n\s\s(\d*))?(?:\n\s\s(\d*))?
i、 e.手动为每行重复捕获组。不幸的是,您无法获得捕获组的所有捕获值。
一个好的解释是,它说:
给定组的返回值是最后捕获的值
由于带有量词的捕获组保留其编号,因此在检查该组时,引擎将返回什么值?所有引擎返回捕获的最后一个值。例如,如果将字符串A_B_C_D_与([A-Z])+匹配,则在检查匹配时,组1将为D。除.NET引擎外,所有中间值都将丢失。本质上,组1在每次模式匹配时都会被覆盖
因此,如果您知道要捕获的行最多为2行,那么您可以尝试以下方法:
I want to match:(?:\n\s\s(\d*))?(?:\n\s\s(\d*))?
i、 e.为每一行手动重复捕获组