我有一个字符列表,例如{o, b, c, c, d, o, f}
.
如果字符串包含不在该列表中的字符,我不希望它成为匹配项。如果一个字符串包含的某个字符出现的次数多于该列表中该字符出现的次数,我不希望它成为匹配项。
字符串中的字符可以按任何顺序出现,并且不必所有字符都出现。在上面的例子中"foo"
应该是匹配但不是"fooo"
.
例如,我将上面的示例缩小为(o{0,2}b?c{0,2}d?f?)
,但这不太有效,因为该正则表达式中的顺序很重要。我得到了一场比赛"oof"
但不是为了"foo"
.
正如 gview 所说,正则表达式不是正确的工具。但是,如果您的正则表达式引擎支持前瞻,您可以使用以下命令:
^(?=(?:[^o]*o){0,2}[^o]*$)(?=(?:[^c]*c){0,2}[^c]*$)(?=[^b]*b?[^b]*$)(?=[^d]*d?[^d]*$)(?=[^f]*f?[^f]*$)[obcdf]+$
它有点长但很简单:
该字符串与^[obcdf]+$
(注意锚点的使用)。
前瞻(?=...)
仅检查(后跟):
(?=(?:[^o]*o){0,2}[^o]*$) # no more than 2 o until the end
(?=[^b]*b?[^b]*$) # no more than 1 b until the end
前瞻中的每个子模式都描述整个字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)