【问题标题】:Case sensitive and insensitive in the same pattern相同模式下区分大小写和不区分大小写
【发布时间】:2011-03-08 05:25:19
【问题描述】:

感谢我之前的作业问题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 个字母,然后不区分大小写地检查其余字母?正则表达式可以做到这一点吗?

【问题讨论】:

    标签: regex case-sensitive case-insensitive


    【解决方案1】:

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

    不区分大小写的嵌入修饰符是(?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/

    【讨论】:

      猜你喜欢
      • 2013-03-06
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      相关资源
      最近更新 更多