正则表达式:带有约束的字母数字字符串

时间:2014-02-23 11:44:20

标签: c++ regex boost

我想编写一个正则表达式来匹配具有以下约束的字母数字字符串:

  1. 至少包含一个字符(a-zA-Z)
  2. 不包含一年中某些月份的名称
  3. 接受任何符号或字符
  4. 长度:8到90之间

    • 有效字符串:“ABG-1234”,“ABG_3423”,“ZIZ @ 342!2324 ^ $ ^ ^ ^”(){},“1982TEST”,“09 87 34 56 aaa”
    • 无效字符串:“123456789”,“1234”,“JANVIER 89”,“DEC 345”,“333”

    可能的解决方案:

         ^           # anchor at the start
        (?=.*\d)     # must contain at least one numeric character
        (?!.*(?:JANVIER|F[Eé]VRIER|MARS|AVRIL|MAI|JUIN|JUILLET|AO[Uù]T|SEPTEMBRE|OCTOBRE|NOVEMBRE|D[Eé]CEMBRE|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))#Does not contain any month name
       (\w)          # Any Character
        (?=.*[a-z])  # must contain one lowercase character
        (?=.*[A-Z])  # must contain one uppercase character
        .{8,90}      # From 8 to 10 characters in length
         $            # anchor at the end"
    

1 个答案:

答案 0 :(得分:1)

当你想提取一些数据时,

regex没问题。在这里,你想要检查不同的特征。恕我直言,你应该这样做:

  1. 检查尺寸(O(1))
  2. 搜索任何alpha字符(O(n))
  3. 搜索几个月(这里regex可能很有趣)
  4. 每个功能都可以通过独立的正则表达式进行检查。您可以编写所有这些文件,然后将它们合并为一个在搜索时执行逻辑AND的文件。

    看看这个主题的最佳答案: Combine Regexp