<font>1<font>2<font>n</font></font></font>,如何能匹配到最外一层或所有嵌套层,n不定。
<font>((?!</?font>).|(<font>((?!</?font>).)*</font>))*</font>
只能匹配到固定层次的内容。
谢谢。

解决方案 »

  1.   

    ("(<font>[1-9]+){0,"+n"}(</font>){0,"+n+"}")不是很正则表达式
      

  2.   

    就是利用正则表达式提取html标签。
      

  3.   

    String font="<font>1<font>2<font>n</font></font></font>";
    Pattern p = Pattern.compile("(?<=<font>)(.*?)(?=</?font>)");
    Matcher m = p.matcher(font);
    while(m.find())
    System.out.println(m.group(1));参考.
      

  4.   

    谢谢。
    刚才是我打错了。
    不过,我需要的结果不是1,2,n。
    我是需要下面这样的结果,也就匹配解析一个html文档结构。
    <font>1<font>2<font>n</font></font></font>
    <font>2<font>n</font></font>
    <font>n</font>
      

  5.   

    <font> ( (?!</?font>). | (<font>((?!</?font>).)*</font>) )* </font> 
    PHP 和 GRETA 的简便之处在于,匹配嵌套(n-1)层的表达式用 (?R) 表示。
    但JAVA不支持?R这样的嵌套匹配,想用相应的替代办法解决。如果没有好的解决办法,那么就采用逐层递归匹配的方法:
    先找到:
    <font>1<font>2<font>n</font></font></font>
    再在以上的结果中找:
    <font>2<font>n</font></font>
    再再在以上的结果中找:
    <font>n</font>现在想解决的:
    1、能否找到嵌套匹配的方法?
    2、能否匹配到最外层(正则表达式)?
      

  6.   

    String font="<font>1<font>2<font>n</font></font></font>";
    Pattern p = Pattern.compile("(<font>.*</font>)");
    Matcher m = p.matcher(font);
    while(m.find()){
    System.out.println(m.group(1));
    p=Pattern.compile("(?<=<font>\\w)(.+)(?=</font>)");
    m=p.matcher(m.group(1));
    }这样试试.
      

  7.   

    谢谢。
    p=Pattern.compile("(?<=<font>\\w)(.+)(?=</font>)");
    这句正则不了解,能帮忙解释下吗?
    和"(<font>.*</font>)"有什么区别?
      

  8.   

    (?<=<font>\\w)(.+)(?=</font>) 匹配中不包含<font>\\w和</font>
    (<font>.*</font>)包含<font>和</font>
      

  9.   

    ?<=和?!都是表示预查找吗?
    但两者的区别是怎样的?
    ?<=表示不以<font>开头吗?
    ?=应该是表示正向预查找,在这里表示什么意思呢?
    能否帮忙解释的更详细些,非常感谢。
      

  10.   

    http://www.unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm目录13
      

  11.   

    (?<=<font>\\w)(.+)(?=</font>) 
    (?<=<font>\\w)断言表达式的前面含有<font>\\w 
    (?=</font>)断言表达式的后面面含有</font>
    这只能说明(.+)的前面含有<font>\\w ,后面含有</font>,也就是说它是被包含在<font>和</font>中,但他们之间应该是可以包含<font></font>的,也就是说它中间还有嵌套的。
    可以这样理解吗?
    (<font>.*</font>)这个表达式会有一个问题,如<font>1<font>2<font>n</font></font></font>a<font>b</font>
    它会匹配成:<font>1<font>2<font>n</font></font></font>a<font>b</font>
    期待的正确结果是得到两组匹配内容:
    1、<font>1<font>2<font>n</font></font></font>
    2、<font>b</font>能否再予指点?
    另外,推荐的教程很棒,是我目前看过最棒的。
      

  12.   

    String font="<font>1<font>2<font>n</font></font></font>a<font>b</font>";
    Pattern p = Pattern.compile("((<font>\\w)+(</font>)+)");
    Matcher m = p.matcher(font);
    while(m.find()){

    Matcher m1 = p.matcher(m.group(1));
    while(m1.find()){
    System.out.println(m1.group(1));
    Pattern p1=Pattern.compile("(?<=<font>\\w)(.+)(?=</font>)");
    m1=p1.matcher(m1.group(1));
    }
    }
      

  13.   

    拿<font>1<font>2<font>n</font></font></font>为例
    (?<=<font>\\w)(.+)(?=</font>) 表示<font>和</font>之间最大字符串匹配.
      匹配:<font>1<font>2<font>n</font></font></font>
    (?<=<font>\\w)(.+?)(?=</font>)表示<font>和</font>之间最小字符串匹配(惰性匹配).
      匹配:<font>n</font>
      

  14.   


    (?<=<font>\\w)(.+)(?=</font>) 
    String font="<font>1<font>2<font>n</font></font></font>a<font>b</font>";
    这个为什么不会匹配到
    <font>1<font>2<font>n</font></font></font>a<font>b</font>
    而只匹配到
    <font>1<font>2<font>n</font></font></font>
    呢?
    从理论上好象不太对,我再试试。二、
    (?<=<font>\\w)(.+?)(?=</font>)
    匹配的不是<font>2<font>n</font></font>,是不是因为?<=起到作用,?<=表示表达式前必须含有<font>,但又不包含自身,于是就把第二层的font给排除了,于是匹配到了这里面层的<font>n</font>,可以这样理解吗?
    那么
    Pattern p1=Pattern.compile("(?<=<font>\\w)(.+)(?=</font>)");
    正确的应该是:
    Pattern p1=Pattern.compile("(?<=<font>\\w)(.+?)(?=</font>)");
    吗?
      

  15.   

    第一问,你的结果好象就没搞对
    String font="<font>1<font>2<font>n</font></font></font>a<font>b</font>";
    使用((<font>\\w)+(</font>)+)这个匹配的目的是得出以下字符串:
    (1) <font>1<font>2<font>n</font></font></font>
    (2)<font>b</font>
    而(?<=<font>\\w)(.+)(?=</font>)的目的是得到每一层的匹配.
    对于以上的(1)来说得到
    <font>1<font>2<font>n</font></font></font>
    <font>2<font>n</font></font>
    <font>n</font>
    (2)就只有自己了,没有嵌套.
    第二问,你这个问题里边不适于用惰性匹配