我正在尝试学习类(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 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 world" has HTML:
关于java - 如何为 HTML 简单文本制作正则表达式模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4412958/