我对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位黑色?
1条答案
按热度按时间rsaldnfx1#
模式
#(\w{1,2})\1\1
可以匹配#000000
和#000
,因为\w{1,2}
可以回溯1个位置以适合反向引用\1\1
的匹配你让图案更具体一点
或者,如果周围不应有非空格字符:
参见regex101 demo。