Scala 正则表达式用于在网页上查找 img src



我正在尝试使用Scala正则表达式在网页中找到imgsrc。 使用以下代码和模拟内容,我没有得到任何匹配。我错过了什么?

def imgSrc(content: String) = {
val src = ".*<img[\w\s]+src\s*=\s*("\w+")[\w\s]+/>.*".r
val formattedContent = content.replaceAll(lineSeparator, "")
(src findAllIn formattedContent).toList
}

测试用例:

"Method imgSrc" should "find src attributes of all img tags in mock web page" in {
val content = """<a href="#search" onclick="_gaq.push(['_trackPageview', '/search']); 
return Manager.createHistoryAndLoad(true);">
<img src="ajaxsolr/images/centralRepository_logo.png" alt="The Central Repository" />
</a>"""
imgSrc(content) should contain("ajaxsolr/images/centralRepository_logo.png")
}

此外,能够在不删除换行符的情况下匹配多行输入会很好。我读了这个和这个,但无法让它工作。

注意:这只是一个学习练习。我知道并且普遍同意不应该使用正则表达式来解析 HTML。

这适用于您的输入:

scala> def imgSrc(content: String) = {
|   val src = """(?s)<imgs[^>]*?srcs*=s*['"]([^'"]*?)['"][^>]*?>""".r
|   src findAllMatchIn content map (_.group(1)) toList
| }
imgSrc: (content: String)List[String]
scala> imgSrc(content)
res13: List[String] = List(ajaxsolr/images/centralRepository_logo.png)

但我建议你使用一些普通的HTML解析器,比如Jsoup:

val doc = Jsoup.parse(content);
val img = doc.select("img").first();
val src = img.attr("src");

最新更新