我正在查看3个逗号分隔值的数字序列,并希望搜索1,2,3
的任何序列。我想匹配1,2,3
; 3,2,1
; 2,1,3
;我不想匹配1,1,1
; 1,2,2
; 1,3,3
; 3,3,1
; 2,3,3
;使用regexr.com进行正则表达式解析。
[123],[123],[123]
是我开始使用的,直到我意识到它匹配任何字符而不是字符序列。
我正在研究正面/负面的前瞻,但无法想到如何在逻辑上对其进行构造,因此正则表达式与指定序列中先前匹配的数字不匹配。
我在这里错过了什么基本的东西?
答案 0 :(得分:5)
您可以使用基于前瞻和后向引用的正则表达式:
([123]),((?!\1)[123]),((?!\1|\2)[123])
RegEx分手:
([123]) # match 1 or 2 or 3 and capture it in group #1
, # match literal comma
((?!\1)[123]) # match 1 or 2 or 3 if it is NOT same as group #1 & capture it in group #2
, # match literal comma
((?!\1|\2)[123]) # match 1 or 2 or 3 if it is NOT same as group #1 OR #2
答案 1 :(得分:0)
答案#1是@ anubhava的解决方案,只要所有3个整数都是唯一的,他的解决方案就能正确匹配任何序列。但是,在搜索序列有2个重复整数的情况下,假设您要搜索的序列为1,2,2
,则使用以下正则表达式。不敢相信我这么努力:P
((1,2,2)|(2,1,2)|(2,2,1))
我意识到在2个重复整数的情况下,只有3个可能的匹配可用。因此,我们可以简单地从字面上搜索这三种情况,而不是尝试构建复杂的lookbehind / lookahead正则表达式。使用捕获组应标记匹配的内容。
显然,在3个重复整数的序列中,例如3,3,3
,只有一个可能的匹配,所以你按字面搜索它。