A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊娜 中级黑马   /  2014-4-25 21:27  /  1155 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天写了一道关于html标签匹配的问题,类似于括号匹配问题,以前这类题是用栈实现的,最近学习了正则表达式,发现用正则表达式解决这类问题简单有效~
附上我写的代码:
  1. package class2;

  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;

  4. public class G {

  5.         public static void main(String[] args) {
  6.                 String s1 = "<div>kkk<a>ddd</a></div>";
  7.                 String s2 = "<div>kkk<a>ddd</div>";
  8.                 func(s1);
  9.                 func(s2);
  10.         }
  11.         public static void func(String s){
  12.                 Pattern pt = Pattern.compile("<([^<>]+)>[^<>]*</([^<>]+)>");
  13.                 Matcher mc = pt.matcher(s);
  14.                 boolean flag = true;
  15.                 while (mc.find()) {
  16.                         //System.out.println(mc.group());
  17.                         if (mc.group(1).equals(mc.group(2))) {
  18.                                 s = mc.replaceFirst("");
  19.                                 mc = pt.matcher(s);
  20.                         } else {
  21.                                 flag = false;
  22.                                 break;
  23.                         }
  24.                 }
  25.       System.out.println(flag);
  26.         }
  27. }
复制代码
结果如下:

但是像类似于<br>这样的标签(没有结束标签</br>)就无法正确判断,希望大家指点~

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

4 个回复

正序浏览
顶一下!!!                                          
回复 使用道具 举报
// Match a standalone tag
rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
回复 使用道具 举报
Java壮哉~~
回复 使用道具 举报

回帖奖励 +1

顶一个!虽说我还没有学到!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马