正则取嵌套标签内容

来源:互联网 发布:淘宝店铺发布宝贝品牌 编辑:程序博客网 时间:2024/05/29 08:10

最近在写新闻发布系统,博客都好久没有更新了,感觉有点惭愧。

今天正好写到获取编辑器编辑后存放在数据库的文字,想了快一天了,才把获取内容弄成功。

例如这样一个标签:

<p style="margin-bottom: 5px;"> asd15:44:08 <a href="http://aaa" target="_self">哈哈哈哈123</a> asdasd <b>这asdasdasfasd里是b标签</b></p>
这是用编辑器(也就是写这篇博客的编辑器写完后存储的格式)随便弄了点内容,想要获取里面的内容

  asd15:44:08哈哈哈哈123asdasd这asdasdasfasd里是b标签   这就是内容。


 刚开始在网上找了找,写出来的是这样的:

Pattern p=Pattern.compile("<p*?>(.*?)</p>");

但是这种方式并不能嵌套,只能输出p标签以内的。

public void setNews_abstract(String news_abstract) {//System.out.println("原数据"+news_abstract);if (news_abstract==null || news_abstract.trim().isEmpty()) {StringBuilder sBuilder = new StringBuilder();//.*具有贪婪的性质,首先匹配到不能匹配为止,根据后面的正则表达式,会进行回溯。//.*?则相反,一个匹配以后,就往下进行,所以不会进行回溯,具有最小匹配的性质。//    Pattern p=Pattern.compile("<span .*?>(.*?)</span>");//    Pattern p=Pattern.compile("<p.*?>(.*?)</p>");//    Pattern p=Pattern.compile("<p.*?>(.*?[^<.*?></.*?>]+)</p>");//    Pattern p=Pattern.compile("<.*?>(.*?)</.*?>");    Pattern p=Pattern.compile(".*?>(.*?)<.*?");//    Pattern p=Pattern.compile(">(.*?)<");    Matcher m=p.matcher(this.body);    while(m.find()){    sBuilder.append(m.group(1));    }    if (sBuilder.length()>20) {    System.out.println(sBuilder);//    System.out.println(sBuilder.length()+":长度---");    System.out.println(sBuilder.substring(0,20));this.news_abstract = sBuilder.substring(0,20);//当没有用户没输入摘要时,自动截取内容前20字。//System.out.println("现数据。。。"+this.news_abstract);//System.out.println("body  :"+body.substring(0, 4));//System.out.println("body  :"+Arrays.toString(body.split("><")));//System.out.println("现数据---"+news_abstract);}}}
做的是一个获取摘要如果大于20个字就截取,用在新闻网页所以20字就足够了。

Pattern p=Pattern.compile(".*?>(.*?)<.*?");  这样就是获取         左右两遍随便什么内容>这里面的内容<左右两遍随便什么内容

由于是刚刚做出来就给大家分享了下成功的喜悦,如果有什么不足和缺陷请联系我!

0 0
原创粉丝点击