java - 如何为 HTML 简单文本制作正则表达式模式?

标签 java regex posix regex-negation

我正在尝试学习类(class)的正则表达式模式。我正在制作一个简单的 HTML 词法分析器/解析器。我知道这不是制作词法分析器/解析器的最佳或最有效的方法,但它只是为了理解正则表达式模式。

所以我的问题是,如何创建一个模式来检查字符串是否不包含任何 HTML 标签(即 <TAG> )并且不包含任何 HTML 实体(即 &ENT; )?

这是我到目前为止所能想到的,但它仍然不起作用:

.+?(^(?:&[A-Za-z0-9#]+;)^(?:<.*?>))

编辑:唯一的问题是我不能否定最终结果,我需要找到一个完整的模式来完成这项任务(如果可能的话),尽管它可能不太漂亮。我从未提到过,但它几乎应该匹配 HTML 页面中的任何简单文本。

最佳答案

您可以使用表达式 <.+?>|&.+?;搜索匹配项,然后否定结果。

  • <.+?>首先说 <然后任何东西(一次或多次)然后 >
  • &.+?;首先说 &然后任何东西(一次或多次)然后 ;

这是一个完整的示例,其中包含 ideone.com demo here .

import java.util.regex.*;

public class Test {
    public static void main(String[] args) {
        String[] tests = { "hello", "hello <b>world</b>!", "Hello&nbsp;world" };
        Pattern p = Pattern.compile("<.+?>|&.+?;");
        for (String test : tests) {
            Matcher m = p.matcher(test);
            if (m.find())
                System.out.printf("\"%s\" has HTML: %s%n", test, m.group());
            else
                System.out.printf("\"%s\" does have no HTML%n", test);
        }
    }
}

输出:

"hello" does have no HTML
"hello <b>world</b>!" has HTML: <b>
"Hello&nbsp;world" has HTML: &nbsp;

关于java - 如何为 HTML 简单文本制作正则表达式模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4412958/

相关文章:

java - 字符串的 ArrayList 到一个字符串

python - 查找并替换引号之间的字符串

php - 使用 PHP 在 MySQL 中进行多词搜索

c - 如何在 c 中结束重定向的 execlp

java - 在for循环Java中更改变量名称

java - 多服务器发现 - Java/Android

java - Hibernate 多对多映射附加列时间戳

python - 如何删除文件中两个重复 block 之一?

c - 多个客户端的 posix 共享内存

c - 为什么 select 不向带有缓冲数据的文件描述符发出信号?