regex 正则表达式量词首先测试出现的次数是多少?

6uxekuva  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(118)

我对regex是个新手,最近才开始学习它。下面是我的测试字符串的一部分,我想从中找到匹配项。

24 bit:
Black #000000
12 bit:
Black #000

我的问题如下。当我使用正则表达式#(\w{1,2})时,组在24位黑色和12位黑色中都匹配00。但是当我使用正则表达式#(\w{1,2})\1\1时,组在24位黑色中匹配00,而在12位黑色中匹配0。虽然我不熟悉正则表达式的工作原理,我很好奇这背后的逻辑是什么。当我使用大括号量词{a,b}来表示a <= (# occurrences) <= b时,对于数字a, a+1,...,b,首先使用哪一个来检查匹配?例如,对于#(\w{1,2}),似乎首先使用了2个匹配项。但在添加\1\1之后,在我看来,不知何故,regex能够看到,使用1个事件而不是2个事件将导致匹配12位黑色?

rsaldnfx

rsaldnfx1#

模式#(\w{1,2})\1\1可以匹配#000000#000,因为\w{1,2}可以回溯1个位置以适合反向引用\1\1的匹配
你让图案更具体一点

#([0-9a-fA-F]{1,2})\1\1

或者,如果周围不应有非空格字符:

(?<!\S)#([0-9a-fA-F]{1,2})\1\1(?!\S)

参见regex101 demo

相关问题