=F(*F)*(+F(*F)*)*  现在只有F=(i ¦a)  
我要匹配i*i*a+a*a*i+a*a*i
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class TestOnline {
public static void main(String args[]) {
Pattern p = Pattern.compile("\\b(?<!\\*)(i|a)(\\*\\1)*(\\+\\1\\2*)*\\b");
String s = "i*i*a*i*i*a";
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group()+"  "+"start:"+m.start()+"end:"+m.end()); 
}
}}
//结果:
i*i  start:0end:3
a*a  start:6end:9
a*a  start:12end:15
我想问的是整个单词是否匹配;它怎么找出这样的东西

解决方案 »

  1.   

    这个表达式这么写不知道 对不 
    \\b(? <!\\*)(i ¦a)(\\*\\1)*(\\+\\1\\2*)*\\b
      

  2.   

    你这么写就不对了,因为\\1匹配的是前面第一个匹配的捕获组的内容,就比如,前面第一个括号匹配了i,那\\1必须匹配i,不能匹配a~
      

  3.   

    首先说这个\\b(i ¦a)(\\*\\1)*(\\+\\1\\2*)*\\b 应该是对的吧
      

  4.   


    //这才是正确的
    public class DemoClass { /**
     * @param args
     */
    public static void main(String[] args) { 
    Pattern p = Pattern.compile("\\b(?<!\\*)(i|a)(\\*\\1)*(\\+\\1\\2*)*\\b"); 
    String s = "i*i*i*i*i+i*i+i*i"; 
    Matcher m = p.matcher(s); 
    while (m.find()) { 
    System.out.println(m.group()+"  "+"start:"+m.start()+"end:"+m.end());  

    }}
      

  5.   

    \\1意思就是你前面第一个捕获组匹配的,你前面已经捕获的是i,所以已经把i存储在内存当中,所以下面\\1不能是a
      

  6.   

    \\b(?<!\\*)(i|a)(\\*\\1)*(\\+\\1\\2*)*\\b
    现在不用反向引用了;
    把 //1 换             (a|i)      (a|i)(\\*(a|i))
    \\b(?<!\\*)(i|a)(\\*(a|i))*(\\+(a|i)(\\*(a|i))*\\b这样不知道对不对
      

  7.   


    "\\b(?<!\\*)(i|a)(\\*(a|i))*(\\+(a|i)(\\*(a|i))*)*\\b"
    \\这个好象可以
      

  8.   

    你说的意思我明白了 Pattern p = Pattern.compile("\\b(?<!(\\*|\\+))(i|a)(\\*(a|i))*(\\+(a|i)(\\*(a|i))*)*\\b");
    //除去+ *号开头的
      

  9.   

    再问一下
    如果我要 \\b(? <!(\\* ¦\\+))(i ¦a)(\\*(a ¦i))*(\\+(a ¦i)(\\*(a ¦i))*)*\\b
    这个东西取非;
    就是要不匹配这个正则表达式的 单词?
    该怎么半?
      

  10.   

    public class DemoClass {    /**
         * @param args
         */
        public static void main(String[] args) { 
            Pattern p = Pattern.compile("\\b(?<!\\*)(i|a)(\\*\\1)*(\\+\\1\\2*)*\\b"); 
            String s = "i*i*i*i*i+i*i+i*i"; 
            Matcher m = p.matcher(s); 
            while (m.find()) { 
            System.out.println(m.group()+"  "+"start:"+m.start()+"end:"+m.end());  
            } 
        }}
      

  11.   

    我想问的是比如说 import java.util.regex.Matcher; 
    import java.util.regex.Pattern; 
    public class yige { 
     public static void main(String[] args) { 
            Pattern p = Pattern.compile("\\b(? <!\\()a+b+\\b"); 
            String s = "aaa (ab jj2rjo aab 2ii oo8d 7haohsie abb"; 
            Matcher m = p.matcher(s); 
            while (m.find()) { 
                p(m.group()); 
            } 
        } 
     public static void p(Object o){ 
    System.out.print(o+" "); 
    } }//答案:aab abb 
    //我现在要   除了以上2个单词,其他单词都找出来
    该怎么办?
      

  12.   


    //只能做到这里了,因为(不能是单词的组合部分~所以,请高手解答!
    Pattern p = Pattern.compile("\\s(?!a+b+)\\S+");
            String s = " aaa (ab jj2rjo aab 2ii oo8d 7haohsie abb";
            Matcher m = p.matcher(s);
            while (m.find()) {
                System.out.println(m.group().trim());
            }
      

  13.   

    (?!X) X,通过零宽度的负 lookahead 
    ?!不能是这样的a+b+;   对吗? 有些不确定
    比如说:正则表达式是[abc]    我只要改成[^abc]就能够找除了abc外的单词了;
    表达式没办法取非吗?   咱们通常找符合的,但是我要找不符合的;
    整个表达式就没有办法取非吗? 一定要重新写一个吗?    
      

  14.   

    ?!意思就是这个位置后面不能是X这种形势,但是这个不占任何位数。
    整个表达式取非是没用过~找一本好点的教程看看~你最近做什么?我发现你提的都是EL的问题