10

感谢我之前的作业问题的帮助Regex to match tags like <A>, <BB>, <CCC> but not <ABC>,但现在我还有另一个作业问题。

我需要匹配标签,例如<LOL><LOLOLOL>(3个大写字母,最后两个字母可重复),但不是<lol>(需要大写)。

使用之前作业中的技术,我尝试了<[A-Z]([A-Z][A-Z])\1*>. 这可行,除了有一个额外的问题:重复部分可以混合大小写!

所以我还需要匹配<LOLolol>, <LOLOLOlol>, 因为它是 3 个大写字母,最后两个字母混合大小写。我知道您可以使用 使模式不区分大小写/i,这将使我与<LOLolol>我拥有的正则表达式匹配,但它现在也将匹配<lololol>,因为对前 3 个字母的检查也是不区分大小写的。

那么我该怎么做呢?如何区分大小写地检查前 3 个字母,然后不区分大小写地检查其余字母?这可以用正则表达式吗?

4

1 回答 1

8

是的!实际上,您可以使用所谓的嵌入式修饰符以某些方式执行此操作。这会将修饰符放入模式中,您基本上可以选择修饰符应用于模式的哪些部分。

不区分大小写的嵌入修饰符是(?i),因此在这种情况下您想要的模式是:

<[A-Z]([A-Z]{2})(?i:\1*)>

参考

  • 正则表达式.info/修饰符
    • 在正则表达式中指定模式
      • 而不是/regex/i,你也可以做/(?i)regex/
    • 仅为正则表达式的一部分打开和关闭模式
      • 你也可以做/first(?i)second(?-i)third/
    • 修改器跨度
      • 你也可以做/first(?i:second)third/
于 2010-06-25T10:13:50.170 回答