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

时间:2010-06-25 10:12:11

标签: 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个字母也不区分大小写。

那我该怎么做?如何敏感地检查前三个字母,然后其他字母不区分大小写?这是正确的吗?

1 个答案:

答案 0 :(得分:7)

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

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

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

参考

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