验证该字符串是否包含超出允许集的任何3个小写的小写子字符串

时间:2018-01-19 19:55:24

标签: regex

我需要验证混合大写和小写字符的字符串[a-zA-Z]不包含任何长度为3的小写子字符串,其中每个字符都不在允许的字符集中。

例如,假设可重复的允许字符集是[abc]。 允许的字符串列表如下所示

abc
abcbcbcb
aaaaaaaa
AabcbaDEF
ABCDEFG
abcDEfgH
AbcDefG

和无效字符串列表

abcd
AbcdE
AabcbcdefgK

是否可以使用正则表达式?

2 个答案:

答案 0 :(得分:2)

根据您的问题和评论中的所有信息,您需要查找符合以下要求的字符串:

  • 只要以下内容不存在,任意数量的字母字符:
    • 包含小写字母的3个小写字母的子字符串,该字母不在集[abc]

考虑到这些要求(你肯定让我在那里摸不着头脑),以下正则表达式应该有效:

See regex in use here

^(?:(?!(?=[a-z]{3})[abc]{0,2}[^abc])[a-zA-Z])+$
^(?:(?!(?=[a-z]{3})[abc]{0,2}[d-z])[a-zA-Z])+$

感谢下面评论中的@anubhava这个答案提供了更快的替代方案(不使用淬火贪婪令牌):

See regex in use here

^(?!.*(?=[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中的字符
      • 以上基本上确保在长度为3的小写子字符串中至少存在一个不在我们的集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 Demo

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]+:结束