提取<p id='ttt'>和</p>中间的字符串。
正则表达式怎么写?
例子String str1="OKOK havae rest<p id='ttt'><input type='radio' name='ddd' />ddd</p>adao dkaoe <p id='ttt'><input type='radio' name='ddd' />ddd</p>";
怎样得到<p id='ttt'>和</p>中间的字符串?

解决方案 »

  1.   

    如果标示符是<p>和</p>不变的话,是可以做到的...大致思路是从<p >开始匹配,直到遇到</p>结束...
      

  2.   

    开头<p id="ttt">和结尾</p>用正则表达式都不难,只要把中间的匹配变成组,然后提取组就能抽取出来了。
      

  3.   

    用String类的indexOf函数试试,还要用到substring函数。正则比较难,一般正在用于表单输入的验证。
      

  4.   

    我公司机器上没装JDK,没法帮你调试...不过等我回去就有人能帮你写出来了...不过我觉得我的思路是可行的...
      

  5.   


    String str1 = "OKOK havae rest <p id='ttt'> <input type='radio' name='ddd' />ddd </p>adao dkaoe <p id='ttt'> <input type='radio' name='ddd' />ddd </p>";
    Pattern p = Pattern.compile("<p.*?>(.*?)</p>");
    Matcher m = p.matcher(str1);
    while (m.find()) {
    System.out.println(m.group());
    }
    lz,试试吧,用replaceAll可以把<p id='ttt'>和 </p>替换掉
      

  6.   

    谢谢大家都来帮我~~
    我尝试了一下syzhwh的方法
    发现部分可以实现。主要是<p></p>这两个标记里面的也给我提取出来了。这个里面的东西是我不要的。怎样才能精确到只有<p id='ttt'></p>这两个标记里面的才提取呢?
    谢谢大家哦~
    对于正则完全不懂~~
    :(
      

  7.   

    对于上面的字符串,你是不是要得到:
    <input type='radio' name='ddd' />ddd和<input type='radio' name='ddd' />ddd ?
      

  8.   

    lz你的需求用正则不合适吧,试试IceWee的方法
      

  9.   

    lz你的需求用正则不合适吧,试试IceWee的方法
      

  10.   


    public static void main(String[] args) {
    String str1 = "OKOK havae rest "
    + "<p id='ttt'> <input type='radio' name='ddd' />ddd </p>adao dkaoe "
    + "<p id='ttt'> <input type='radio' name='ddd' />ddd </p>"; String regex = "<p[^>]*>.*?<[//]p>";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(str1);
    while(m.find()){
    String temp = m.group();
    System.out.println(temp.substring(temp.indexOf('>') + 1, temp.lastIndexOf("</p>")));
    }
    }
      

  11.   

    回复justinavril,是的就是要中间的东西
    回复kString,谢谢。我会尝试一下你说的IceWee,
    回复No_End_Point,跟syzhwh的一样<p></p>的也出现了~~~
      

  12.   

    String str = "OKOK havae rest <p id='ttt'> <input type='radio' name='ddd' />ddd </p>adao dkaoe <p id='ttt'> <input type='radio' name='ddd' />ddd </p>";
    String reg = "<p id='ttt'>(.*?)</p>";Pattern p = Pattern.compile(reg );
    Matcher m = p.matcher(str);
    while (m.find()) {
        System.out.println(m.group(1));
    }
    group中加数字表示第几个捕获组
      

  13.   

    我不是让你用replaceAll去掉那些吗,如下这样,
    System.out.println(m.group().replaceAll("<p.*?>", "").replaceAll("</p>", ""));
      

  14.   

    我在最后做了些小处理
    while(m.find()){
                String temp = m.group();
                System.out.println(temp.substring(temp.indexOf('>') + 1, temp.lastIndexOf("</p>")));
            }temp.substring(temp.indexOf('>') + 1, temp.lastIndexOf("</p>"))用了个笨办法
      

  15.   

    你们的方法我都试过了。
    但是我不要的<p></p>还是出现了~~~
    我也不知道要怎么解决了~~谢谢你们。我比较笨
    让你们花了这么长时间。很抱歉啊~~
      

  16.   

    本来是用indexof和substring来做的。后来发现不行。
    然后说用正则来做,正则不懂。
    代码就是上面的朋友贴出来的那些。。
    String context=request.getParameter("content");
    String reg= "<p[^>]*>.*?<[//]p>";
    Pattern p = Pattern.compile(reg );
    Matcher m = p.matcher(context);
    while (m.find()) {
        System.out.println(m.group(1));
    }
    context是接受页面fckeditor传送过来的html代码
    然后要把这个里面有<p id='ttt'> </p>这个的拆分出来
      

  17.   

    用replace吧,但怎么提取出<p id="ttt">呢
    attention-ing
      

  18.   

    <p\\s*id='.*'>这个就可以吧
      

  19.   

    import java.util.regex.*;public class GetString {
    public static void main(String args[]){
    String str1="OKOK havae rest <p id='ttt'> <input type='radio' name='ddd' />ddd </p>adao dkaoe <p id='ttt'> <input type='radio' name='ddd' />ddd </p>"; 
    String regex = "<p\\s*id='.*'>.*</p>";

    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(str1);

    while(matcher.find())
    System.out.println(matcher.group());
    }
    }<p id='ttt'> <input type='radio' name='ddd' />ddd </p>adao dkaoe <p id='ttt'> <input type='radio' name='ddd' />ddd </p>我的这个太土了...还要继续替换...感觉要用非匹配的办法...没时间学啊最近忙啊...555
      

  20.   

    24# 真是太土了  我写的还不能把中间的adao dkaoe 过滤掉...建议你找火龙果帮忙吧...
      

  21.   

    想提取出其中的部分我感觉可以用substring()这个方法,应该比正则要强一点吧
      

  22.   

    这个用substring()可以这样截取String str1="OKOK havae rest <p id='ttt'> <input type='radio' name='ddd' />ddd </p>adao dkaoe <p id='ttt'> <input type='radio' name='ddd' />ddd </p>"; 
        System.out.println(str1.substring(28,66));
    结果为:<input type='radio' name='ddd' />ddd
      

  23.   

    关键问题是你那个index是固定的啊,人家的String有可能是不固定的...所以还是要用正则
      

  24.   


    你不是提取 <p id='ttt'>和 </p>中间的字符串吗, 14#的程序可以解决你的问题吧?
      

  25.   


    package Test;
    import java.util.regex.*;
    public class qdb
    {
    public static void f(String str,String regex)
    {
    Pattern p=Pattern.compile(regex);
    Matcher m=p.matcher(str);
    while(m.find())
    {
    System.out.println(m.group(1));
    }
    }
    public static void main(String[] args)
    {
    String str1="OKOK havae rest <p id='ttt'> <input type='radio' name='ddd' />ddd </p>" +
    "adao dkaoe <p id='ttt'> <input type='radio' name='ddd' />ddd </p>";
    String regex="(?:<p.*?>)(.*?)(?:</p>)";
    f(str1,regex);
    }
    }
      

  26.   

    (?:<p.*?>) 非捕获组,因为要追踪的>是最近的一个,所以运用了勉强类型,匹配<p id='sadas'>或者
    <p class='gf' style="dsfas">等一系列字符串,
    (.*?) 捕获组1,用来捕获<p></p>中间的字符串,
    (?:</p>)非捕获组,匹配</p>
      

  27.   


    public static void main(String[] args) {
    String str1="OKOK havae rest<p id='ttt'> <input type='radio' name='ddd' />ddd </p>adao dkaoe <p id='ttt'> <input type='radio' name='ddd' />ddd </p>";
    String regex = "(?s)(<p.*?p>).*?";
    Matcher m = Pattern.compile(regex).matcher("");
    m = m.reset(str1);
    while(m.find()){
    System.out.println("sss"+m.group());
    }
    }
      

  28.   

    判斷用正則,提取用subString應該更直觀吧
      

  29.   

    我真弱啊。谢谢大家都来帮我。我换了一种方法做这个实在是做不出来。。总是有<P></p>的东西在里面。
    不过还是要谢谢大家~~以后好好学学正则。蛮重要的~~~:)
      

  30.   

    我真弱啊。谢谢大家都来帮我。我换了一种方法做这个实在是做不出来。。总是有<P></p>的东西在里面。
    不过还是要谢谢大家~~以后好好学学正则。蛮重要的~~~:)
      

  31.   

    这丫头真是好玩,竟然无满意结贴,你可知道这样你的分是不会收回的,被CSDN没收了
      

  32.   

    qiandongbo,ooo19841080xinxin等人都帮你写了那么多代码,好心帮你找答案,居然无满意结贴。气愤啊。
      

  33.   

    失敬失敬,开始真没注意看,不知道是不是CSDN抽了下疯,还是我抽了下疯~~,错怪你了,呵呵