现在正在做采集程序,打算用正则表达式做,求以下正则表达式
上几天发了一帖求一正则表达式,经各老师的代码以对正则表达式有一些了解,帖了地址:http://topic.csdn.net/u/20080823/14/11ad551a-e0ab-4e02-89d8-d87796504ff4.html
现想深入学习一下,谢谢大家的帮助,一定按时结帖
现求如下正则表达式:
系统标签 * 可以替代任意字符串。 
系统标签 ! 可以替代除了<和>以外的任意字符串。 
系统标签 ~ 可以替代除了<>'"以外的任意字符串。 
系统标签 ^ 可以替代除了数字和<>之外字符串。 
系统标签 $ 可以替代数字字符串。 
采集规则中,需要获取的内容部分用四个以上系统标签代替,如 !!!!
现求如下正则表达式
采集标题规则:class="zsfontBT">!!!!&nbsp;~<span class="zsfont12a" 
采集作者规则:<td height="20px">&nbsp;!</td>!</tr>!<tr>!<td class="zsfont12a">****<br />!<strong>作品关键字:</strong>
采集贴子地址规则:<td style='width:33%!><a href='$,$$$$.aspx' class='BookName' title=
采集内容规则:<div id="content" align="left">!<script src='~~~~'></script>

解决方案 »

  1.   

    晕死,我发二百分怎么变成二十了!!
    还说一天后才能加分,为什么要控制一天后!!CSDN,你咋想的,晕死
      

  2.   

    那得先把“系统标签”换成 Java 认识的正则表达式。我不明白的是,比如:采集贴子地址规则:
    <td style='width:33%!><a href='$,$$$$.aspx' class='BookName' title=这个要取什么呢?
      

  3.   

    采集内容规则: <div id="content" align="left">! <script src='~~~~'> </script>这里面没有 $$$$ 那取什么?
      

  4.   

    看了LZ的需求,如果要匹配的东西前后都固定,那么你需要的正则是很简单的,
    比如匹配 帖子地址 正则String regex = " <td style='width:33%!> <a href='(.*?).aspx' class='BookName' title="
    上面的未经测试,只是用捕获组(.*?) 匹配中间的内容ps: 火龙果是绝对是正则的高手,向他学习
      

  5.   

    哎,郁闷重新描述一下,就问一个问题,我在做采集程序,我已采集到此页面的内容,我要得到内容中的作者我想根据作者前后的内容得到作者信息,收于作者前后的有些信息是动态的,就用一些系统标签来代替系统标签 ! 可以替代除了 <和>以外的任意字符串。
    系统标签 * 可以替代任意字符串。
    四个*号为要采集的内容采集作者规则: <td height="20px">&nbsp;! </td>! </tr>! <tr>! <td class="zsfont12a">**** <br />! <strong>作品关键字: </strong>
    假如我得到内容的内容如下:2001年创作个人唯一一本作品魔法骑士原创作品并在上砚出版,建立中国第一个跨网站交流平台性质的玄幻文学协会<br>  2002年创办起点中文网<br>  2003年推出VIP会员制度<br>基本原则<td height="20px">&nbsp;b</td>a</tr>c<tr>d<td class="zsfont12a">药通天下网是什么<br />e<strong>作品关键字: </strong>2001年创作个人唯一一本作品魔法骑士原创作品并在上砚出版,建立中国第一个跨网站交流平台性质的玄幻文学协会<br>  2002年创办起点中文网<br>  2003年推出VIP会员制度<br>我现在想得到四个*号所代表的"药品天下网是什么"
      

  6.   

    如果****前后标签固定的话可以这样:
    (?<=<td class="zsfont12a">).+?(?=<br />)
      

  7.   

    晕,csdn怎么自己加空格的?
    去掉?号后面的空格和<=后面的空格还有?=后面的空格
      

  8.   

    我先问一下:1:系统标签只能是那样么?
    2:
    系统标签 ! 可以替代除了 <和>以外的任意字符串。
    ! 表示一个字符还是一串字符?系统标签 * 可以替代任意字符串。 
    四个*号为要采集的内容 
    如果一个 * 可以表示任意多个字符串的话,那为什么要用四个 * 表示采集的内容呢?3:采集规则是写在配置文件中的么?
    如果是写在配置文件中的话,我认为不要采用什么系统标签,直接换成提取数据的正则表达式
      

  9.   

    以下假设系统标签能表示多个字符!系统标签 * 可以替代任意字符串。
    用正则表达式 .+ 代替
    系统标签 ! 可以替代除了 <和>以外的任意字符串。 
    用正则表达式 [^<>]+ 代替
    系统标签 ~ 可以替代除了 <>'"以外的任意字符串。 
    用正则表达式 [^'"<>]+ 代替
    系统标签 ^ 可以替代除了数字和 <>之外字符串。
    用正则表达式 [^0-9<>]+ 代替
    系统标签 $ 可以替代数字字符串。
    用正则表达式 \d+ 代替由于 CSDN 替换的关系 < 前面的空格得去掉(那个空格是 CSDN 自说自话加上去的)
      

  10.   

    采集标题规则:class="zsfontBT">!!!!&nbsp;~<span class="zsfont12a"
    class="zsfontBT">([^<>]+)&nbsp;[^'"<>]<span class="zsfont12a"采集作者规则: <td height="20px">&nbsp;!</td>!</tr>!<tr>!<td class="zsfont12a">****<br />!<strong>作品关键字:</strong>
    <td height="20px">&nbsp;[^<>]+</td>[^<>]+</tr>[^<>]+<tr>[^<>]+<td class="zsfont12a">(.+?)<br />[^<>]+<strong>作品关键字:</strong>采集贴子地址规则:<td style='width:33%!><a href='$,$$$$.aspx' class='BookName' title=
    <td style='width:33%[^<>]><a href='\d,(\d+).aspx' class='BookName' title=采集内容规则: <div id="content" align="left">!<script src='~~~~'></script>
    <div id="content" align="left">[^<>]+<script src='([^'"<>]+)'></script>
    按照 23 楼的数据,测试代码:import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test01 {
        public static void main(String[] args) {
            String str = "2001年创作个人唯一一本作品魔法骑士原创作品并在上砚出版,建立中国第" +
                    "一个跨网站交流平台性质的玄幻文学协会<br>  2002年创办起点中文网<br>  " +
                    "2003年推出VIP会员制度 <br>基本原则<td height=\"20px\">&nbsp;b</td>" +
                    "a</tr>c<tr>d<td class=\"zsfont12a\">药通天下网是什么<br />e" +
                    "<strong>作品关键字:</strong>2001年创作个人唯一一本作品魔法骑士原创作" +
                    "品并在上砚出版,建立中国第一个跨网站交流平台性质的玄幻文学协会<br>  " +
                    "2002年创办起点中文网<br>  2003年推出VIP会员制度<br>";
            String regex = "<td height=\"20px\">&nbsp;[^<>]+</td>[^<>]+</tr>[^<>]+" +
                    "<tr>[^<>]+<td class=\"zsfont12a\">(.+?)<br />[^<>]+<strong>" +
                    "作品关键字:</strong";
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(str);
            while(matcher.find()) {
                System.out.println(matcher.group(1));
            }
        }
    }由于采集规则中只要取一组数据,使用 matcher.group(1) 就可以了。如果你要采取大量操作的话,可以把 Pattern 对象保存便于重用,可以大大节省表达式编译的时间。