我需要验证混合大写和小写字符的字符串[a-zA-Z]不包含任何长度为3的小写子字符串,其中每个字符都不在允许的字符集中。
例如,假设可重复的允许字符集是[abc]。 允许的字符串列表如下所示
abc
abcbcbcb
aaaaaaaa
AabcbaDEF
ABCDEFG
abcDEfgH
AbcDefG
和无效字符串列表
abcd
AbcdE
AabcbcdefgK
是否可以使用正则表达式?
答案 0 :(得分:2)
根据您的问题和评论中的所有信息,您需要查找符合以下要求的字符串:
[abc]
考虑到这些要求(你肯定让我在那里摸不着头脑),以下正则表达式应该有效:
^(?:(?!(?=[a-z]{3})[abc]{0,2}[^abc])[a-zA-Z])+$
^(?:(?!(?=[a-z]{3})[abc]{0,2}[d-z])[a-zA-Z])+$
感谢下面评论中的@anubhava这个答案提供了更快的替代方案(不使用淬火贪婪令牌):
^(?!.*(?=[a-z]{3})[abc]{0,2}[d-z])[a-zA-Z]+$
^
在行首处断言位置(?:(?!(?=[a-z]{3})[abc]{0,2}[^abc])[a-zA-Z])+
Tempered greedy token匹配任何ASCII字母字符,确保以下内容不存在:
(?=[a-z]{3})
肯定前瞻,确保以下3个字符为小写ASCII字母字符[abc]{0,2}[^abc]
匹配集合abc
中的0到2个字符,后跟至少一个不在集abc
中的字符
abc
中的小写字母$
断言行尾的位置答案 1 :(得分:2)
您可以使用此正则表达式:
<!-- The slideshow -->
<div class="carousel-inner">
<div class="active item one" style="background-image:url('1.jpg')">
</div>
<div class="item two" style="background-image:url('2.jpg')">
</div>
<div class="item three" style="background-image:url('3.jpg')">
</div>
</div>
RegEx说明:
^(?!.*(?:[d-z][a-z]{2}|[a-z]{2}[d-z]|[a-z][d-z][a-z]))[A-Za-z]+$
:开始^
:开始负面看点
(?!.*
:启动非捕获组
(?:
:匹配[d-z][a-z]{2}
字母后跟任意2 d-z
个字母non-abc
:或|
:匹配2个小写字母,后跟[a-z]{2}[d-z]
个字母d-z
:或|
:匹配小写字母后跟[a-z][d-z][a-z]
后跟小写字母d-z
:结束非捕获组)
:结束否定前瞻)
:匹配1个以上/大写字符[A-Za-z]+
:结束