根据字符串中的术语提取“包含”字符串

时间:2010-09-30 18:31:24

标签: java

我有一个java函数从任何网站的HTML页面源中提取字符串...该函数基本上接受网站名称,以及要搜索的术语。现在,此搜索字词始终包含在javascript标记中。我需要做的是拉出包含搜索词的整个javascript(在标签内)。

这是一个例子 -

<script type="text/javascript">
    //Roundtrip
    rtTop = Number(new Date());

    document.documentElement.className += ' jsenabled';
</script>

对于上面的javascript代码段,我的搜索字词为“rtTop”。一旦找到,我希望我的函数返回包含脚本标记内所有内容的字符串。

任何新颖的解决方案?感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用

行的正则表达式
String someHTML = //get your HTML from wherever
Pattern pattern = Pattern.compile("<script type=\"text/javascript\">(.*?rtTop.*?)</script>",Pattern.DOTALL);
Matcher myMatcher = pattern.matcher(someHTML);
myMatcher.find();
String result = myMatcher.group(1);

答案 1 :(得分:1)

我希望我能评论JacobM的回答,但我想我需要更多的stackCred。

您可以使用HTML解析器that's usually the better solution。也就是说,对于有限的范围,我经常使用regEx。虽然这是一个卑鄙的野兽。我对JacobM模式的一个改变是用[^&lt;] +

替换开始元素中的属性

即使“类型”不存在或者有其他奇怪之处,也可以匹配。我还要包装。*?随着parens使得稍后使用这些值更容易。

*更新* 借用JacobM的答案。我会稍微改变一下模式来处理多个元素。

String someHTML = //get your HTML from wherever
String lKeyword = "rtTop";
String lRegexPattern = "(.*)(<script[^>]*>(((?!</).)*)"+lKeyword +"(((?!</).)*)</script>)(.*)";
Pattern pattern = Pattern.compile(lRegexPattern ,Pattern.DOTALL);
Matcher myMatcher = pattern.matcher(someHTML);
myMatcher.find();
String lPreKeyword = myMatcher.group(3);
String lPostKeyword = myMatcher.group(5);
String result = lPreKeyword + lKeyword + lPostKeyword;

此模式的实例可以是found here。就像我说的,通过正则表达式解析HTML可以快速实现真正的丑陋。