感谢我以前的作业问题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个字母也不区分大小写。
那我该怎么做?如何敏感地检查前三个字母,然后其他字母不区分大小写?这是正确的吗?
答案 0 :(得分:7)
是的!事实上,您可以使用所谓的嵌入式修改器以某种方式执行此操作。这会将修改器放在模式中,您可以基本上选择修改器应用于模式的哪些部分。
不区分大小写的嵌入式修饰符为(?i)
,因此在这种情况下您需要的模式是:
<[A-Z]([A-Z]{2})(?i:\1*)>
/regex/i
/(?i)regex/
/first(?i)second(?-i)third/
/first(?i:second)third/