代码之家  ›  专栏  ›  技术社区  ›  Nambi_0915

如何限制regex中的负展望

  •  1
  • Nambi_0915  · 技术社区  · 7 年前

    我有一个字符串:

    Symphony Veterinary Center                                                           
    
    symphony care veterinary  
    
    170 cort 96th St.,                                                                   
    naib, NZ 10025                                                            
    212-866-8000                                                                                                                                              
    
                    We care yours like ours !!                                                                                                                  
    

    this regex :

    ((?i)^(?=.*?(?:veterinary|animal[^s]|hospital| care |pets?|clinic)) *(?:[^ \n\r:]+? +?){1,5}$)(?:(?![\s\S]*?(?:(?i)veterinary|animal|hospital|care |pets?|clinic))[\s\S]*?)(\d{2,}[\s\S]+?(?: [A-Z][A-Za-z] (?:\d+-)?\d+))
    

    在这个正则表达式中,我有一个消极的展望 (?![\s\S]*?(?:(?i)veterinary|animal|hospital|care |pets?|clinic)) 在第一组和第二组之间,以确保没有像动物,宠物,医院这样的关键字出现在第一组和第二组之间。

    但只有当我移除 care 在字符串的最后一行。我不知道为什么消极的前瞻是检查到字符串的结尾,而不是在第二组之前?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Wiktor Stribiżew    7 年前

    这个 (?:(?![\s\S]*?(?:(?i)veterinary|animal|hospital|care |pets?|clinic))[\s\S]*?) veterinary , animal hospital , care , pet , pets clinic .

    (?:(?!veterinary|animal|hospital|care\ |pets?|clinic)[\s\S])*?
    

    看到了吗 regex demo

    模式将匹配任何字符( [\s\S] ),尽可能少( *? )不会在 (?!veterinary|animal|hospital|care\ |pets?|clinic) 负面展望。

    Pattern.COMMENTS 修饰符选项(不要忘记转义任何文本空格和 # 查尔斯)。