这几乎与Regex: individually optional capture groups, but collectively at least one must exist中的情况类似,但有一种扭曲,使得该解决方案无法使用。旧解决方案依赖于可选组之后的字符串结尾。
我正在检查我们从外部来源获取的数据是否有效。有三个元素,我们称它们为T,N和M,其中至少一个必须出现在字符串的开头。可能存在两个或三个。该命令是规定的。在出现了我需要的元素之后,其他任何内容也可能出现,但不是原始元素之一(变化:此后出现的可选尾部必须以已定义组中的字符开头,并且该组不包括T,N或M个字符)。元素之前,元素之间以及之后可以有空格。
(我称它们为“元素”,每个元素都是一个子字符串,为此我有一个有效的正则表达式,我会将其作为一个组插入-但在此示例中,我将仅使用字符T,N和M作为占位符)。
另一个问题,我尝试使用否定的前瞻,但是问题是我无法指定字符串的结尾。
(?!$)(T?)(N?)(M?)$
这与有效的情况(例如TNL1
不匹配(我开头有T和N,所以我不在乎L1是否在后面)]
(?!$)(T?)(N?)(M?)
这将匹配空字符串以外的所有内容,例如仅L1
。
一些有效的测试用例是:T
,N
,M
,TM
,T N
,TM and something else
。一些无效的测试用例是:only other stuff
,MNT
,other beginning, then TNM
,``
检查我的哪些字符串有效的正确的正则表达式是什么?