可能重复:
RegEx match open tags except XHTML self-contained tags
我有一个HTML文件,如下所示:
<html>
<head>
<title>foobar</title>
</head>
<body>
bla bla<br />
{[CONTAINER]}
Hello
{[/CONTAINER]}
</body>
</html>
如何从容器中获取其他html文件中的“Hello”?我几年前在PHP中做过这个,我记得一个REGEX-Function,它调用一个definde类函数,并将容器的内容作为参数。
有人可以告诉我如何用Java做到这一点吗?
答案 0 :(得分:4)
您可以使用匹配{[CONTAINER]}
和{[/CONTAINER]}
之间所有内容的正则表达式。例如:
// Non capturing open tag. Non-capturing mean it won't be included in result when we match it against some text.
String open = "(?<=\\{\\[CONTAINER\\]\\})";
// Content between open and close tag.
String inside = ".*?";
// Non capturing close tag.
String close = "(?=\\{\\[/CONTAINER\\]\\})";
// Final regex
String regex = open + inside + close;
String text = "<html>..."; // you string here
// Usage
Matcher matcher = Pattern.compile(regex, Pattern.DOTALL).matcher(text);
while (matcher.find()) {
String content = matcher.group().trim();
System.out.println(content);
}
但你必须小心。因为它仅适用于{[CONTAINER]}
和{[/CONTAINTER]}
。不支持此自定义标记的属性。
您还必须意识到它不会以任何特定方式处理html标记。因此,如果您的CONTENT
标记之间存在html标记,则会包含这些标记。
答案 1 :(得分:1)
答案 2 :(得分:0)
为什么要使用Java? 您可以简单地将DOM API与JavaScript一起使用:
document.getElementById("id_container").firstChild.data; // beware of \n char
或以效率较低的方式:
document.getElementById("id_container").innerHTML;
但是,如果您的文件正在服务器上构建,您也可以使用相同的API:
http://docs.oracle.com/javase/6/docs/api/org/w3c/dom/package-summary.html