例如,我有一个字符串:
R-G-B-G
我想知道这个字符串是否包含至少2个'G',1个'R'和1个“B”。 字符串可以将其大小从1更改为11个符号,字母可以出现在由“ - ”分隔的随机位置。
3 'R' -> R-R-G-R-R-B -> match
2 'B' -> ... -> not match
1 'R' 1 'G' 1 'B' -> ... -> match
修改
继续前进我需要检查更多案例。
我的字符串由套接字,链接和颜色组成,例如:
R R-R B-R-R has 6 Sockets, one 2-link, one 3-link, 5R, 1B and 0G colors.
用户向我发送了许多套接字,链接长度以及该链接中所需的颜色,我必须告诉它是否具有所有这些。我已经构建了表达式以匹配每个案例,但我无法弄清楚如何将它们组合在一起。
6 sockets,Link with size 2,2 R colors
所有组合必须返回true,因为R RR BRR,另一方面,字符串: RRR BRR 必须为false,因为2 R link是3的一部分链接BRR。
或者我应该运行3个单独的表达式,其中先前的输出作为输入发送到下一个。
答案 0 :(得分:1)
您可以在开始 select @data, @data.STAsText()
--Convert to polygon it
DECLARE @Polygon geography
SET @Polygon = geography::STGeomFromWKB( 0x01 + 0x03000000 + 0x01000000 + SUBSTRING(@data.STAsBinary(),6,datalength(@data.STAsBinary())),@data.STSrid)
select @Polygon
后为每个必需的字母链接前瞻(?=...)
。
F.e。对于至少两个' R'和两个G'和一个' 并且对于1到11长的字符串。
^
请注意,这些预测中使用的延迟搜索^(?=(?:.*?R){2})(?=(?:.*?G){2})(?=(?:.*?B){1}).{1,11}$
只是速度优化
在这种情况下它会变得非常重要,因为它是如此短的字符串。