import java.io.*;
import java.util.regex.*;
public class test
{
    public static void main(String[] args)
    {
String str = "Iraq fighting";
        String regex="(?<=<(\\w+)>).*(?=<\\/\1>)"; 
        Matcher m=Pattern.compile(regex).matcher(str);
       while(m.find()){
            System.out.println(m.group());
            
        }
//  System.out.println(2);
    }
}Exception in thread "main" java.util.regex.PatternSyntaxException: Look-behind g
roup does not have an obvious maximum length near index 10
(?<=<(\w+)>).*(?=<\/>)
          ^
        at java.util.regex.Pattern.error(Unknown Source)
        at java.util.regex.Pattern.group0(Unknown Source)
        at java.util.regex.Pattern.sequence(Unknown Source)
        at java.util.regex.Pattern.expr(Unknown Source)
        at java.util.regex.Pattern.compile(Unknown Source)
        at java.util.regex.Pattern.<init>(Unknown Source)
        at java.util.regex.Pattern.compile(Unknown Source)
        at test.main(test.java:9)
哪里出了问题?。。

解决方案 »

  1.   

    你说你要做什么吧.
    正则中间不要叫无谓的空格。(?<=<(\\w+)>)中不能用\\w+之类的不确定长度的匹配字符
      

  2.   

    就是匹配一个HTML 比如说<b>end</b>,匹配的话就打印end
      

  3.   

    mport java.util.regex.*;public class Test{

        public static void main(String args[])  {
         String str="<b> asgasdfg</b> ";
                   
        
         String regex="<b>([^<]*)</b>";
         Matcher m=Pattern.compile(regex).matcher(str); 
         if(m.find()){ 
         System.out.println(m.group(1)); 
         }
     
        }
    }
    F:\java>java Test
     asgasdfg
      

  4.   

    String regex="(?<=<(\\w+)>).*(?=<\\/\1>)"; 
    //问题出在逆序环视中使用的量词不对
    //java中虽然支持(?<=Expression)的语法,但是只支持固定长度的表达式,量词也只支持“?”,其它量词如“*”、“+”、“{m,}”是不支持的
    //另外反向引用在java中要用\\1
    String str = "Iraq <b>fighting</b>"; 
    String regex="<(\\w+)>(.*?)</\\1>"; 
    Matcher m=Pattern.compile(regex).matcher(str); 
    while(m.find()){ 
       System.out.println(m.group(2));