区分大小写并且在相同模式下不敏感

reg*_*tml 8 regex case-sensitive case-insensitive

感谢我以前的作业问题的帮助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个字母的检查也不区分大小写.

那我该怎么做?如何敏感地检查前三个字母,然后其他字母不区分大小写?正则表达式可以实现吗?

pol*_*nts 7

是! 事实上,您可以使用所谓的嵌入式修改器以某种方式执行此操作.这将修改器放在模式中,您可以基本上选择修改器应用于模式的哪些部分.

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

<[A-Z]([A-Z]{2})(?i:\1*)>
Run Code Online (Sandbox Code Playgroud)

参考

  • regular-expressions.info/Modifiers
    • 在正则表达式中指定模式
      • 而不是/regex/i,你也可以做/(?i)regex/
    • 仅为正则表达式的一部分打开和关闭模式
      • 你也可以 /first(?i)second(?-i)third/
    • 修饰符跨度
      • 你也可以 /first(?i:second)third/