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

Scala regex to find img src on a web page

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

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")
}

此外,如果能够在不删除换行符的情况下匹配多行输入,那就太好了。我阅读了 this and this 但无法正常工作。

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

这适用于您的输入:

scala> def imgSrc(content: String) = {
     |   val src = """(?s)<img\s[^>]*?src\s*=\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");