我需要一个正则表达式,满足以下需求:
1。字符串以"Types/"开头
2。但不以"Types/help/"开头。该怎么写?谢谢。

解决方案 »

  1.   

    用(?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始  
    测试程序:
    mport java.util.regex.*;public class test5 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    String str="Types/sadsadsaasdas"; 
    String regEx="^Types/(?!help/)"; //表示a或f 
        Pattern p=Pattern.compile(regEx); 
    Matcher m=p.matcher(str); 
    boolean rs=m.find();
        System.out.println(rs);
    str="Types/help/sadsadsaasdas";
    m=p.matcher(str);
    rs=m.find();
        System.out.println(rs);
    }}
      

  2.   

    谢谢,不过这个方法不行,例如:"Types/help2/aaa"就匹配了,这是不对的。
      

  3.   

    这个用String的方法也很好解决啊
    (str.startWith("Type/") && !str.startWith("Types/help/"))
      

  4.   

    你的条件就是
    字符串以"Types/"开头,但不以"Types/help/"开头
    Types/help2/aaa不是以Types/help/开头的,如果你是要所有Types/help开头的都不匹配,简单地修改String regEx="^Types/(?!help)"; 
     
    就可以了
      

  5.   

    :"Types/help2/aaa"不是以Types/help/开头的啊
    楼主究竟需要排除哪些啊?
    是Types/help 还是 Types/help/这两个明显不同啊
      

  6.   

    楼主的需求讲得很清楚了,但是String regEx="^Types/(?!help)";
      

  7.   

    楼主的需求讲得很清楚了,但是String regEx="^Types/(?!help)";不行
      

  8.   

    对不起,我没有讲清楚。
    keiy的方法之所以不行是因为"Types/2help/aaa"也匹配了,而我只想让"Types/help/"不匹配,也就是说:"Types/2help/aaa"和"Types/help2/aaa"和"Types/abcd/aaa"都匹配。
      

  9.   

    String regEx="^Types/(?!help)";
    是对的
    "Types/2help/aaa"匹配了,这不是你的要求吗?只让"Types/help/"不匹配,不矛盾阿.
    搂主逻辑混乱