我特意使用Ruby,但我很好奇...说我试图匹配小数后跟至少三位数。
这里是正则表达式:/(\.\d{5,})/
如果不使用负面的lookbehind,如果它遵循A)空格或制表符或换行符,或者B)是字符串的开头,我将如何才能使它成为唯一匹配?
答案 0 :(得分:1)
让我们首先考虑如何使用lookbehind来完成它。 然后我们只检查在捕获之前是否是行的开头或空格:
(?<=^|\s)(\.\d{5,})
我们可以简单地将该看法改为普通的捕获组 这意味着前面的空格也会被捕获。但是在替换中,如果我们想保留它,我们就可以使用该捕获。
(^|\s)(\.\d{5,})
在PCRE正则表达式引擎中我们有\ K
\ K:重置报告的匹配的起点。任何先前的 消费的字符不再包含在最终匹配中
因此,通过在正则表达式中使用\ K,前面的空格不包含在匹配
中(?:^|\s)\K(\.\d{5,})
测试here
但是,如果将scan
与具有捕获组的正则表达式一起使用?然后它似乎只输出捕获组,而不是非捕获组或捕获组中没有的东西
例如:
m = '.12345 .123456 NOT.1234567'.scan(/(?:^|\s)(\.\d{5,})/)
=> [[".12345"], [".123456"]]
m = 'ab123cd'.scan(/[a-z]+(\d+)(?:[a-z]+)/)
=> [["123"]]
因此,当您使用扫描时,不需要使用外观。