我正在尝试在表示为字符串的 2D 矩阵中搜索模式。如下图:
// horizontal line
String pat1 =
"............." +
"............." +
"............." +
"....XXXX....." +
"............." +
".............";
// vertical line
String pat2 =
"............." +
"......X......" +
"......X......" +
"......X......" +
"......X......" +
".............";
搜索第一个模式将是微不足道的,正则表达式将类似于:
X+
在第二种情况下,它有点棘手但可行,因为我知道矩阵的列数和行数:
(X.{`WIDTH - 1`})+
当我遇到问题以提出正确的正则表达式时,我正在尝试找出一种识别以下模式的方法:
// fixed but unknown number of columns
String pat3 =
"............." +
".....XXX....." +
".....XXX....." +
".....XXX....." +
".....XXX....." +
".............";
// variable number of columns
String pat4 =
"............." +
".....XXX....." +
"....XXXXX...." +
"...XXXXXXX..." +
".....XXX....." +
".............";
我正在寻找的是一种创建正则表达式模式的方法,相当于:
(X.{`WIDTH - PREVCOUNT`})+
最后一个匹配模式的长度在哪里PREVCOUNT
(我知道我会丢失 pat4 中第 4 行的第一个 X,但我可以忍受)。我知道正则表达式中有前瞻,但我想知道我想要实现的目标是否可能。即使有可能,我也担心使用前瞻对性能的影响,因为我不完全了解它们在内部是如何工作的。
有没有办法通过单个正则表达式验证来做到这一点,还是我必须逐行搜索然后尝试查看 X 是否都是连续的?
编辑:作为澄清,我正在尝试搜索 X 的“斑点”。只要跨列/行有连续的 X,它就可以被认为属于一个 blob。几个例子:
String blob1 =
"............." +
"......XX....." +
"....XXXX....." +
"...XXXXX....." +
".....XXX....." +
".............";
String blob2 =
"............." +
".....XXX....." +
"....XXXXX....." +
"...XXXXXXX..." +
"....XXXXX...." +
".....XXX.....";
String blob3 =
"............." +
".....XXX....." +
".....XXX......" +
".....XXX....." +
"............." +
".............";
String notblob =
"............." +
"..XXX........" +
"......XXX....." +
"..XXX........." +
".............." +
".............";
我的解决方案不需要精确,因此我尝试使用可能很糟糕的正则表达式方法。