请教诸位大虾:
    
       要判断给定文本不包含某单词的 正则表达式,应该如何写 ?        比如 给定文本  “ i have a dream that ”  , 要判断它不包含 单词  dream .       具体应用背景: 关于规则文件解析的       rule   XXX1
           when   YYY1
           then     ZZZ1
       end       rule  XXX2
           when  YYY2
           then    ZZZ2
        end
     
      希望  将每个 rule-end 提取出来 。      如果单纯写成  \\s*rule(.*)when(.*)then(.*)end 是不行的,因为会匹配成       rule( XXX1 when ... XXX2) when YYY2 then ZZZ2 end ,这样就无法提取出每个 rule-end 规则了。      我的思路是编写正则表达式: \\s*rule(判断文本XXX1不包含单词rule的正则表达式)when(判断文本YYY1不包含单词when的正则表达式)then(判断文本ZZZ1不包含单词then的正则表达式) ; 但一时不知道括号里的正则表达式怎么写。        在线等赐教,先谢过了!~~~
            
     

解决方案 »

  1.   

    非贪婪匹配不就行了\\s*rule(.*?)when(.*?)then(.*?)end
      

  2.   

    如果: rule ---> ( , when ---> [ , then ---> ] , end ---> )
    那么, 这就是一个 ([])([])...([]) 的匹配问题了, 看上去有点像嵌套和递归, 实际上又不像, 看上去是一类问题中的特殊形式, 
      

  3.   

    String a=“ i have a dream that ”;
    if(a.matches(".*dream.*"))//这个是判断匹配
    if(!a.matches(".*dream.*"))//这个就是判断不匹配了
      

  4.   

    哈哈,果然震惊!~~~ 不过, 否定判断要写在正则表达式里面, 而不是在外面做否定判断, 即希望是如下形式  if ("text".matches("regex")) 而不是 if (!("text".matches("regex")))
      

  5.   

    哈哈,果然震惊!~~~ 不过, 否定判断要写在正则表达式里面, 而不是在外面做否定判断, 即希望是如下形式 if ("text".matches("regex")) 而不是 if (!("text".matches("regex")))
      

  6.   


    public class Test {
    public static void main(String[] args) {
    String a="I have a dream!";
    String b="I have a drea!";
    System.out.println(a.matches("^(?!.*?dream).*$"));//false
    System.out.println(b.matches("^(?!.*?dream).*$"));//true
    }
    }