有个不简单的正则,帮忙看看。

Yedy2000 2009-09-11 04:43:28
String b = "<td width=\"200\">[a]</td><td>b</td><td>[c]</td>";
这样个字符串,我想把<td>和</td>之间有中括号包含的[]匹配,并且td可能有样式。
即结果是<td width=\"200\">[a]</td>和<td>[c]</td>两个,而不要<td>b</td>。
...全文
115 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
-过客- 2009-09-12
  • 打赏
  • 举报
回复
Java中确实是比较麻烦,.NET中就非常简单了

String b = " <td width=\"200\">[a] </td> <td>b </td> <td>[c] </td><td> fdas[d]fdsfd[e]fdasfdsa </td>"; 
String regex = "(?is)<td[^>]*>(?!(?:(?!\\[[^\\[\\]]*\\]).)*</td>)(?:(?!</?td\\b).)*</td>";
Matcher m=Pattern.compile(regex).matcher(b);
while(m.find())
{
System.out.println(m.group());
}
leonis01 2009-09-11
  • 打赏
  • 举报
回复
<td[^>]*>\s*\[[^<\]]*\]\s*</td>
yanliang_xt 2009-09-11
  • 打赏
  • 举报
回复

import java.util.regex.*;

public class Test48
{
public static void main(String... args) {
String b = " <td width=\"200\">[a] </td> <td>b </td><td>b </td><td>b </td> <td>[c] </td>";
//System.out.println(b.replace("(?<!\\[)b (?!\\])",""));

Pattern p = Pattern.compile("(<td\\s?[^\\s]*?>\\[.*?\\]\\s*</td>)");
Matcher m = p.matcher(b);
while(m.find()) {
System.out.println(m.group(0));
}
}
}
hbgzg3006 2009-09-11
  • 打赏
  • 举报
回复
           Matcher m=Pattern.compile("(?s)<td[^>]*?>[^\\[<>]*?\\[+.*?\\].*?</td>").matcher(" <td width=\"200\">[a] </td> <td>b </td> <td>[c] </td>");
while(m.find())
System.out.println(m.group());
logon29 2009-09-11
  • 打赏
  • 举报
回复
可以用 replaceAll把<td>b</td>替换掉,然后再分拆。

b.replaceAll("(<td>){1}(\\w|\\s)+(</td>){1}", "");
swandragon 2009-09-11
  • 打赏
  • 举报
回复
<[^>]+>\[[^\/]+\]\s*<\/[^>]+>

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧