正则表达式如何表示要匹配无顺序字符呢?想要用规则: 匹配有chi  、peo、rep字符的字符串来匹配字符串 china people republic 、people  republic china、 republic people china等字符串如何做呢?

解决方案 »

  1.   


    Pattern p = Pattern.compile("(chi)|(peo)|(rep)");
    Matcher m = p.matcher("china people republic");
    System.out.println(m.find());
      

  2.   

    但是这个正则表达式无法匹配people republic china,
    我要的规则是能匹配有chi 且有peo且有rep字符的字符串,
    包括匹配china people republic 、people republic china、 republic people china等字符串
      

  3.   

    呵呵,是这样,你有3个匹配项,3*2*1=6 也就是有6个排列组合。
    就算是用间隙查找,也要写6个。
    所以,我个人建议,你还是分三次匹配好了
    if(find("chi) && find("peo") && find("rep"))如果你非得一个正则,你去看看间隙匹配。 也叫零宽度匹配
    比如
    "chi(?=peo.*?rep)"
    "chi(?=rep.*?peo)"
     或者干错写6个正则,然后OR 也行
    (chi.*?peo.*?rep)|(chi.*?peo.*?rep)|...
      

  4.   

    你的意思不就是说只要这三个出现就行了吗?那就用下面表达式
    str.matches(".*("chi").*") && str.matches(".*(peo).*") && str.matches(".*(rep).*");
      

  5.   

    一下,和我碰到的问题类似。  最后我用Indexof方法解决了!