在java中怎么表达一个子集?
当然普通字符的子集是很好表达的,但是考虑下面一种情况:
我想找一个字符串中的单词cat,可以使用单词界定符,正则表达式可以写成 \\bcat\\b 
但是现在我想找到以非双引号界定的单词cat,也就是说两遍应该还是单词界定符,但是这个单词界定符还不能是双引号,也就是说是\b的一个子集。应该怎么表达?

解决方案 »

  1.   

    请用取反/*nihuajie.info*/
    String pattern="[^"]cat[^"]";
      

  2.   

    他就要用让任何不是双引号的东东来当cat的分隔符但是两边要一样么?
    算了我也迷糊了
    给个例子吧
      

  3.   

    "[\\W&&[^\\\"]]cat[\\W&&[^\\\"]]"
    但有点问题
    因为\b包含了\\W以及字符串的开头或结尾,比如"cat"就能用\bcat\b匹配而不能用\Wcat\W匹配
    同时,在取并集或交集的时候(上面的[..&&..]),必须是字符的集合,而\b不仅包含了字符\W,还包含了非字符(字符串的开头和结尾)
    所以,上面不能用\\b而只能用\\W
    这样就会导致以cat开头或结尾的符合要求的字符串匹配不出来暂时还没想出能完全匹配的表达式,呵呵
      

  4.   

    Pattern p = Pattern.compile("(?<!\")\\bcat\\b(?!\")");
      

  5.   

    这个跟他的要求差远了,他是不想要"作为cat边界的;而且,这个会要求cat两边有两个边界字符其中一个是"
      

  6.   

    我觉得楼主是想要“捕获组”那个概念吧。
    也就是把用引号、不用引号的cat捕获后,然后提取出cat那个组,或外围的组。